首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

http://poj.org/problem?id=1330&&大私货一个

2012-08-13 
http://poj.org/problem?id1330&&大水货一个啊LCA纯版题,各种调试不成功,砸电脑的心都有了;撞墙去了恶心

http://poj.org/problem?id=1330&&大水货一个啊


LCA纯版题,各种调试不成功,砸电脑的心都有了;撞墙去了http://poj.org/problem?id=1330&&大私货一个恶心死了;

更恶心的是vs2010报错:sbIDE http://poj.org/problem?id=1330&&大私货一个

#include<iostream>#include<cstring>#include<vector>#include<cstdio>#include<algorithm>using namespace std;const int MAX=10010;#define CLR(arr,val) memset(arr,val,sizeof(arr))int n,father[MAX],rank[MAX],ancestors[MAX],Indegree[MAX];vector<int> Adj[MAX],temp[MAX];bool visited[MAX];void Init(){   for(int i=0;i<MAX;i++)    {   father[i]=i;        Adj[i].clear();        temp[i].clear();    }    fill(rank,rank+MAX,1);        CLR(visited,false);}int Find(int u){   return father[u]==u?u:father[u]=Find(father[u]);}void Union(int u,int v){   u=Find(u);    v=Find(v);    if(u==v) return ;     father[v]=u;}void LCA(int u){   ancestors[u]=u;//设定自己为祖先    for(vector<int>::size_type i=0;i<Adj[u].size();i++)     {   LCA(Adj[u][i]);//DFS        Union(u,Adj[u][i]);        ancestors[Find(u)]=u;    }    visited[u]=true;    for(vector<int>::size_type i=0;i<temp[u].size();i++)    {   if(visited[temp[u][i]])           cout<<ancestors[Find(temp[u][i])]<<endl;     }}int main(){   int k,u,v;    scanf("%d",&k);    while(k--)    {   scanf("%d",&n);        Init();        for(int i=0;i<n-1;i++)        {   scanf("%d%d",&u,&v);            Adj[u].push_back(v);            Indegree[v]++;        }        scanf("%d%d",&u,&v);        temp[u].push_back(v);        temp[v].push_back(u);        for(int i=1;i<=n;i++)            if(!Indegree[i])             {   LCA(i);//找到树根                 break;             }         }    return 0;}/* 1 3 1 4 3 6 3 5 5 2 4 8 4 7 1 3 3 4 5 6 4 6 2 7 */


热点排行