1. 程式人生 > >UVA10917 Walk Through the Forest

UVA10917 Walk Through the Forest

c++ int esp nbsp getc sca family external solution

題目描述

PDF

技術分享圖片

輸入輸出格式

輸入格式:

技術分享圖片

輸出格式:

技術分享圖片

輸入輸出樣例

輸入樣例#1:
5 6
1 3 2
1 4 2
3 4 3
1 5 12
4 2 34
5 2 24
7 8
1 3 1
1 4 1
3 7 1
7 4 1
7 5 1
6 7 1
5 2 1
6 2 1
0
輸出樣例#1:
2
4

Solution:

  常規()題,考試的時候細節寫掛。

  首先以$2$為源點處理出到其他點的最短路,然後遍歷一遍圖,標記那些不滿足$dis[u]>dis[v]$的邊,最後只要從$1$廣搜一下處理出答案就好了,廣搜時記錄一下所到邊的變化值,用變化值去更新答案。

代碼:

 1 #include<bits/stdc++.h>
 2 #define il inline
 3 #define ll long long
 4 #define For(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
 5 #define Bor(i,a,b) for(int (i)=(b);(i)>=(a);(i)--)
 6 using namespace std;
 7 const int N=100005;
 8 int n,m,to[N],net[N],w[N],dis[N],h[N],cnt;
9 int ans[N],deta[N]; 10 bool vis[N],ct[N]; 11 12 il int gi(){ 13 int a=0;char x=getchar();bool f=0; 14 while((x<0||x>9)&&x!=-)x=getchar(); 15 if(x==-)x=getchar(),f=1; 16 while(x>=0&&x<=9)a=(a<<3)+(a<<1)+x-48,x=getchar(); 17 return
f?-a:a; 18 } 19 20 il void add(int u,int v,int c){to[++cnt]=v,net[cnt]=h[u],h[u]=cnt,w[cnt]=c;} 21 22 queue<int>q; 23 24 il void pre(){ 25 memset(dis,0x3f,sizeof(dis)); 26 memset(ct,0,sizeof(ct)); 27 dis[2]=0;q.push(2); 28 while(!q.empty()){ 29 int u=q.front();q.pop();vis[u]=0; 30 for(int i=h[u];i;i=net[i]) 31 if(dis[to[i]]>dis[u]+w[i]){ 32 dis[to[i]]=dis[u]+w[i]; 33 if(!vis[to[i]])vis[to[i]]=1,q.push(to[i]); 34 } 35 } 36 For(u,1,n) 37 for(int i=h[u];i;i=net[i]) 38 if(dis[u]<=dis[to[i]]) ct[i]=1; 39 } 40 41 il void solve(){ 42 memset(ans,0,sizeof(ans)); 43 ans[1]=1;deta[1]=1; 44 q.push(1); 45 while(!q.empty()){ 46 int u=q.front();vis[u]=0;q.pop(); 47 for(int i=h[u];i;i=net[i]) 48 if(!ct[i]){ 49 deta[to[i]]+=deta[u], 50 ans[to[i]]+=deta[u]; 51 if(!vis[to[i]]) vis[to[i]]=1,q.push(to[i]); 52 } 53 deta[u]=0; 54 } 55 printf("%d\n",ans[2]); 56 } 57 58 int main(){ 59 int u,v,c; 60 while(scanf("%d",&n)==1){ 61 if(!n)break; 62 m=gi(); 63 cnt=0; 64 memset(h,0,sizeof(h)); 65 For(i,1,m) u=gi(),v=gi(),c=gi(),add(u,v,c),add(v,u,c); 66 pre(),solve(); 67 } 68 return 0; 69 }

UVA10917 Walk Through the Forest