标签:des style blog http color os strong io
传送门:http://poj.org/problem?id=1330
Time Limit: 1000MS | Memory Limit: 10000K | |
Description
Input
Output
Sample Input
2 16 1 14 8 5 10 16 5 9 4 6 8 4 4 10 1 13 6 15 10 11 6 7 10 2 16 3 8 1 16 12 16 7 5 2 3 3 4 3 1 1 5 3 5
Sample Output
4 3
Source
1 #include<set> 2 #include<queue> 3 #include<vector> 4 #include<cstdio> 5 #include<cstring> 6 #include<iostream> 7 #include<algorithm> 8 using namespace std; 9 const int N = 10010; 10 #define For(i,n) for(int i=1;i<=n;i++) 11 #define Rep(i,l,r) for(int i=l;i<=r;i++) 12 13 struct Edge{ 14 int t,next; 15 }E[N]; 16 17 int in[N],head[N],Es; 18 int n,T,x,y,ans,qx,qy,root,anc[N],fa[N]; 19 bool vis[N]; 20 21 void makelist(int s,int t){ 22 E[Es].t = t;E[Es].next = head[s]; 23 head[s] = Es++; 24 } 25 26 int find(int i){ 27 return (fa[i]==i)?(i):(find(fa[i])); 28 } 29 30 void LCA(int i){ 31 if(ans!=0) return; 32 anc[i] = i; 33 for(int p = head[i];p!=-1;p=E[p].next){ 34 LCA(E[p].t); 35 fa[find(E[p].t)] = find(i); 36 anc[find(i)] = i; 37 } 38 vis[i] = true; 39 if(i==qx) 40 if(vis[qy]) ans = anc[find(qy)]; 41 if(i==qy) 42 if(vis[qx]) ans = anc[find(qx)]; 43 } 44 45 int main(){ 46 scanf("%d",&T); 47 For(i,T){ 48 memset(head,-1,sizeof(head));Es = 0;ans = 0; 49 memset(in,0,sizeof(in));memset(anc,0,sizeof(anc)); 50 memset(vis,false,sizeof(vis)); 51 scanf("%d",&n); 52 For(i,n-1){ 53 fa[i] = i; 54 scanf("%d %d",&x,&y); 55 makelist(x,y); 56 in[y]++; 57 } 58 fa[n] = n; 59 For(i,n) 60 if(!in[i]) {root = i;break;} 61 scanf("%d %d",&qx,&qy); 62 LCA(root); 63 printf("%d\n",ans); 64 } 65 return 0; 66 }
Nearest Common Ancestors·POJ1330,布布扣,bubuko.com
Nearest Common Ancestors·POJ1330
标签:des style blog http color os strong io
原文地址:http://www.cnblogs.com/kjerome/p/3886728.html