比赛 |
东方版NOIP模拟赛 |
评测结果 |
AAATTTTTTTAAAAETEEET |
题目名称 |
Yuyuko |
最终得分 |
35 |
用户昵称 |
h0309 |
运行时间 |
28.621 s |
代码语言 |
C++ |
内存使用 |
32.99 MiB |
提交时间 |
2015-10-28 21:24:08 |
显示代码纯文本
#include<cstdio>
#include<vector>
using namespace std;
struct node{
int to,w;
};
vector<node> v[6010];
node p;
int f[6000],ans=0x7fffffff;
bool mark[6000][6000];
int find(int x){
if(x==f[x]) return x;
return f[x]=find(f[x]);
}
void bing(int x,int y){
f[find(x)]=find(y);
}
void dfs(int x,int sum){
if(x==1){
ans=sum<ans?sum:ans;
return;
}
for(int i=0;i<v[x].size();i++){
if(mark[x][v[x][i].to]) continue;
mark[x][v[x][i].to]=mark[v[x][i].to][x]=1;
dfs(v[x][i].to,sum+v[x][i].w);
mark[x][v[x][i].to]=mark[v[x][i].to][x]=0;
}
}
int main(){
int n,m,flag;
freopen("zaw.in","r",stdin);
freopen("zaw.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) f[i]=i;
for(int i=1;i<=m;i++){
int u,vv,a,b;
scanf("%d%d%d%d",&u,&vv,&a,&b);
p.to=vv;p.w=a;
v[u].push_back(p);
p.to=u;p.w=b;
v[vv].push_back(p);
if(u>1&&vv>1) bing(u,vv);
}
flag=1;
for(int i=1;i<v[1].size();i++)
if(find(v[1][i].to)==find(v[1][i-1].to)){flag=0;break;}
if(flag){printf("-1");return 0;}
for(int i=0;i<v[1].size();i++){
mark[1][v[1][i].to]=mark[v[1][i].to][1]=1;
dfs(v[1][i].to,v[1][i].w);
mark[1][v[1][i].to]=mark[v[1][i].to][1]=0;
}
printf("%d",ans);
return 0;
}