diff --git a/POJ/1511_xuezhongfenfei.cpp b/POJ/1511_xuezhongfenfei.cpp index 2925ec3..7ef620c 100644 --- a/POJ/1511_xuezhongfenfei.cpp +++ b/POJ/1511_xuezhongfenfei.cpp @@ -3,8 +3,8 @@ using namespace std; typedef struct fun { - int a,w,pre; -}e; + int a,w,pre; +} e; fun link[2][1000005]; bool vis[1000005]; int point[2][1000005]; @@ -12,73 +12,73 @@ __int64 price[1000005]; int P,Q; void spfa(int n) { - int i; - for(i=2; i<=P; i++) - { - vis[i]=false; - price[i]=INT_MAX; - } - vis[1]=true; - price[i]=0; - queueq; - q.push(1); - while(q.empty()==false) - { - int t=q.front(); - q.pop(); - vis[t]=false; - i=point[n][t]; - while(i!=-1) - { - - int v=link[n][i].a; - if(price[v]>price[t]+link[n][i].w) + int i; + for(i=2; i<=P; i++) { - price[v]=price[t]+link[n][i].w; - if(vis[v]==false) - { - vis[v]=true; - q.push(v); - } + vis[i]=false; + price[i]=INT_MAX; + } + vis[1]=true; + price[i]=0; + queueq; + q.push(1); + while(q.empty()==false) + { + int t=q.front(); + q.pop(); + vis[t]=false; + i=point[n][t]; + while(i!=-1) + { + + int v=link[n][i].a; + if(price[v]>price[t]+link[n][i].w) + { + price[v]=price[t]+link[n][i].w; + if(vis[v]==false) + { + vis[v]=true; + q.push(v); + } + } + i=link[n][i].pre; + } } - i=link[n][i].pre; - } - } } int main() { - int T,i,a,b,c; - scanf("%d",&T); - while(T--) - { - scanf("%d%d",&P,&Q); - for(i=1; i<=P; i++) - point[0][i]=point[1][i]=-1;//这个是用来弄初值的 - i=0; - for(i=1; i<=Q; i++) - { + int T,i,a,b,c; + scanf("%d",&T); + while(T--) + { + scanf("%d%d",&P,&Q); + for(i=1; i<=P; i++) + point[0][i]=point[1][i]=-1;//这个是用来弄初值的 + i=0; + for(i=1; i<=Q; i++) + { scanf("%d%d%d",&a,&b,&c); link[0][i].a=a; - link[0][i].w=c; - link[1][i].a=b; - link[1][i].w=c; - link[1][i].pre=point[1][a];//记录的是以a开头的 - point[1][a]=i; - link[0][i].pre=point[0][b]; - point[0][b]=i; - } - __int64 sum=0; - spfa(1);//是用来出发点不同的啊 - for(i=1; i<=P; i++) - { - sum+=price[i]; - } - spfa(0); - for(i=1; i<=P; i++) - { - sum+=price[i]; - } - printf("%I64d\n",sum); - } - return 0; + link[0][i].w=c; + link[1][i].a=b; + link[1][i].w=c; + link[1][i].pre=point[1][a];//记录的是以a开头的 + point[1][a]=i; + link[0][i].pre=point[0][b]; + point[0][b]=i; + } + __int64 sum=0; + spfa(1);//是用来出发点不同的啊 + for(i=1; i<=P; i++) + { + sum+=price[i]; + } + spfa(0); + for(i=1; i<=P; i++) + { + sum+=price[i]; + } + printf("%I64d\n",sum); + } + return 0; }