标签:des style blog http color os io strong for
Description
Input
Output
Sample Input
4 2 1 1 3 10 2 4 20 2 3 3
Sample Output
27
Hint
#include <stdio.h> #include <string.h> #include <stdlib.h> #define INF 9999999 int dis[1010]; int cnt; int n, ml, md; struct N { int u; int v; int w; }s[200005]; void add(int u, int v, int w ) { s[cnt].u=u; s[cnt].v=v; s[cnt++].w=w; } void bellman_ford() { int i, j; for(i=1; i<=n; i++) dis[i]=INF; dis[1]=0; for(i=2; i<=n; i++ ) { int flag=0; for(j=0; j<cnt; j++ ) //检查每条边 { if( dis[s[j].v] > dis[s[j].u] + s[j].w ) { dis[s[j].v] = dis[s[j].u]+s[j].w ; flag=1; } } if(flag==0) break; } for(i=0; i<cnt; i++) { if(dis[s[i].v] > dis[s[i].u]+s[i].w ) break; } if(i<cnt) printf("-1\n"); else { if( dis[n]==INF ) printf("-2\n"); else printf("%d\n", dis[n] ); } } int main() { int i, j; int u, v, w; while(scanf("%d %d %d", &n, &ml, &md)!=EOF) { cnt=0; for(i=0; i<ml; i++) { scanf("%d %d %d", &u, &v, &w ); //亲密的牛 最大距离 if(u>v) { u=u^v; v=v^u; u=u^v; //还可以这样写: u^=v^=u^=v ; } add(u, v, w); } for(j=0; j<md; j++) { scanf("%d %d %d", &u, &v, &w ); //排斥的牛 最小距离 if(u<v) { u=u^v; v=v^u; u=u^v; // u^=v^=u^=v ; } add(u, v, -w); } bellman_ford(); } return 0; }
标签:des style blog http color os io strong for
原文地址:http://www.cnblogs.com/yspworld/p/3937414.html