比赛 东方版NOIP模拟赛 评测结果 WWAAWAAEEEAEEEEEEEEE
题目名称 Yuyuko 最终得分 25
用户昵称 dagger 运行时间 1.044 s
代码语言 C++ 内存使用 58.32 MiB
提交时间 2015-10-28 21:53:50
显示代码纯文本
#include<stdio.h>
#include<queue>
#include<algorithm>
using namespace std;
const int inf=0x7fffffff;
queue <int>q;
int r[4000][4000],d[4000],n,m,c[4000],f[4000],ans;
bool ar[5000],fh;
void spfa(int s){
	int i,u;
	q.push(s);
	ar[s]=true;
	d[s]=0;
	while(!q.empty()){
		u=q.front();
		q.pop();
		ar[u]=false;
		for(i=1;i<=n;i++){
			if(r[u][i]>0&&d[i]>d[u]+r[u][i]){
				f[i]=u;
				d[i]=d[u]+r[u][i];
				if(!ar[i]){
					q.push(i);
					ar[i]=true;
					c[i]++;
					if(c[i]>n)fh=true;
				}
			}
		}
		if(fh)break;
	}
}
int main(){
	freopen("zaw.in","r",stdin);
	freopen("zaw.out","w",stdout);
	int i,j,x,y,a,b;
	ans=inf;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)d[i]=inf;
	for(i=1;i<=m;i++){
		scanf("%d%d%d%d",&x,&y,&a,&b);
		r[x][y]=a;r[y][x]=b;
	}
	spfa(1);
	//for(i=1;i<=n;i++)printf("%d ",d[i]);
	for(i=2;i<=n;i++){
		if(r[i][1]&&f[i]!=1)ans=min(ans,r[i][1]+d[i]);
	}
	if(ans==inf)ans=-1;
	printf("%d",ans);
	return 0;
}