标签:任务 namespace mil content efi 题解 这一 其他 帮助
5 4
1 2 -3
1 3 -6
3 4 1
4 5 -9
4
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #include<queue> 5 #define maxn 50005 6 #define inf 1<<29 7 #define maxm 100005 8 int vis[maxn],dis[maxn]; 9 int m,n,ecnt,head[maxn]; 10 using namespace std; 11 struct edge{ 12 int u,v,w,next; 13 }E[maxm]; 14 void addedge(int u,int v,int w) 15 { 16 E[++ecnt].u=u; 17 E[ecnt].v=v; 18 E[ecnt].w=w; 19 E[ecnt].next=head[u]; 20 head[u]=ecnt; 21 } 22 int cal(int x) 23 { 24 if(x%2)x++; 25 x/=2; 26 return x; 27 } 28 void spfa() 29 { 30 queue<int> q; 31 for(int i=1 ; i<=n ; ++i) 32 vis[i]=0,dis[i]=inf; 33 vis[n]=1; 34 dis[n]=1; 35 q.push(n); 36 while(!q.empty()) 37 { 38 int d=q.front();q.pop(); 39 vis[d]=0; 40 for(int i=head[d] ; i ; i=E[i].next ) 41 { 42 int v=E[i].v; 43 int w=E[i].w; 44 int tmp=cal(dis[d]+w); 45 if(dis[v]>tmp) 46 { 47 dis[v]=tmp; 48 if(dis[v]<1)dis[v]=1; 49 if(!vis[v]) 50 { 51 vis[v]=1; 52 q.push(v); 53 } 54 } 55 } 56 } 57 } 58 int main() 59 { 60 int u,v,w,i; 61 scanf("%d%d",&n,&m); 62 for(int i=1 ; i<=m ; ++i) 63 { 64 scanf("%d%d%d",&u,&v,&w); 65 addedge(v,u,-w); 66 } 67 spfa(); 68 printf("%d",dis[1]); 69 return 0; 70 }
标签:任务 namespace mil content efi 题解 这一 其他 帮助
原文地址:http://www.cnblogs.com/fujudge/p/7505529.html