Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
poj100纪念#include<stdio.h> #include<iostream> using namespace std; int n,m,s,e,w[1005],ra[105],rb[105],l[105],N; struct wzf {long long t[105][105]; }a,first,ans; long long Min(long long a,long long b){return a<b?a:b;} wzf times(wzf a,wzf b) {int i,j,k; wzf c; for(i=1;i<=N;i++) for(j=1;j<=N;j++) {c.t[i][j]=214748363700000ll; for(k=1;k<=N;k++) c.t[i][j]=Min(c.t[i][j],a.t[i][k]+b.t[k][j]); } return c; } wzf quick(int k) {wzf sum=first,s=a; int i=1; while(k) {if(k&1) {if(i!=1) sum=times(sum,s); else sum=s; i++; } s=times(s,s); k>>=1; } return sum; } int main() {cin>>n>>m>>s>>e; int i,j; for(i=1;i<=m;i++) cin>>l[i]>>ra[i]>>rb[i]; for(i=1;i<=m;i++) {if(w[ra[i]]==0) w[ra[i]]=++N; if(w[rb[i]]==0) w[rb[i]]=++N; } for(i=1;i<=N;i++) for(j=1;j<=N;j++) a.t[i][j]=1000000000000000ll; for(i=1;i<=m;i++) a.t[w[ra[i]]][w[rb[i]]]=a.t[w[rb[i]]][w[ra[i]]]=l[i]; ans=quick(n); cout<<ans.t[w[s]][w[e]]; return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator