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