比赛 东方版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;
}