2010 Stanford Local ACM Programming Contest-H解题报告
生活随笔
收集整理的這篇文章主要介紹了
2010 Stanford Local ACM Programming Contest-H解题报告
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意是說,給出一些道路,要修建一條高速公路,高速公路不能分叉,而且是在給出的圖中的一些路徑組成,求的是不在高速公路上的點離高速公路的最遠距離的最小值是多少。首先要找到一條這個圖中的關鍵路徑,既最長的路徑,如果高速公路不是最長路徑,那么沒法滿足其他的點到高速公路的距離最大值最小,而找最長路徑,先從任意點找到離這個點最遠的一個點,然后從最遠的點找到一條最長的路徑既為最長路徑了。很有用的結論
View Code 1 #include<stdio.h> 2 #include<string.h> 3 #define N 100005 4 #define inf 0x7fffffff 5 int head[N],t; 6 int used[N]; 7 int d[N]; 8 int par[N]; 9 int f,r; 10 struct node 11 { 12 int l; 13 int id; 14 }; 15 node q[N]; 16 struct edge 17 { 18 int v,next,l; 19 }; 20 edge e[2*N]; 21 void add(int u,int v,int l) 22 { 23 e[t].v=v; 24 e[t].l=l; 25 e[t].next=head[u]; 26 head[u]=t++; 27 } 28 void bfs() 29 { 30 int i,j; 31 node tmp; 32 while(f<r) 33 { 34 tmp=q[f]; 35 f++; 36 for(i=head[tmp.id];i>=0;i=e[i].next) 37 { 38 if(!used[e[i].v]) 39 { 40 used[e[i].v]=true; 41 par[e[i].v]=tmp.id; 42 d[e[i].v]=tmp.l+e[i].l; 43 q[r].id=e[i].v; 44 q[r++].l=d[e[i].v]; 45 } 46 } 47 } 48 } 49 int main() 50 { 51 int n,i,j,k; 52 int u,v,l; 53 node tmp; 54 while(scanf("%d",&n)&&n) 55 { 56 memset(head,-1,sizeof(head)); 57 t=0; 58 for(i=0;i<n-1;i++) 59 { 60 scanf("%d%d%d",&u,&v,&l); 61 add(u,v,l); 62 add(v,u,l); 63 } 64 memset(used,0,sizeof(used)); 65 d[1]=0; 66 used[1]=true; 67 f=r=0; 68 q[r].id=1; 69 q[r++].l=0; 70 bfs(); 71 int max=d[1],mi=1; 72 for(i=1;i<=n;i++) 73 { 74 if(d[i]>max) 75 { 76 max=d[i]; 77 mi=i; 78 } 79 } 80 int s=mi; 81 f=r=0; 82 q[r].id=s; 83 q[r++].l=0; 84 memset(used,0,sizeof(used)); 85 memset(par,0,sizeof(par)); 86 used[s]=true; 87 d[s]=0; 88 bfs(); 89 max=d[1],mi=1; 90 for(i=1;i<=n;i++) 91 { 92 if(d[i]>max) 93 { 94 max=d[i]; 95 mi=i; 96 } 97 } 98 k=mi; 99 f=r=0; 100 memset(used,0,sizeof(used)); 101 used[s]=true; 102 d[s]=0; 103 while(k) 104 { 105 used[k]=true; 106 q[r].id=k; 107 q[r++].l=0; 108 d[k]=0; 109 k=par[k]; 110 if(k==s) 111 break; 112 } 113 bfs(); 114 max=d[1]; 115 for(i=1;i<=n;i++) 116 { 117 if(d[i]>max) 118 { 119 max=d[i]; 120 } 121 } 122 printf("%d\n",max); 123 } 124 return 0; 125 }轉載于:https://www.cnblogs.com/caozhenhai/archive/2012/06/04/2535182.html
總結
以上是生活随笔為你收集整理的2010 Stanford Local ACM Programming Contest-H解题报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CorelDRAWX4的VBA插件开发(
- 下一篇: CorelDRAWX4的VBA插件开发(