| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
我用并查集过的,发代码!include <iostream>
using namespace std;
const int mymax1=500;
int root[mymax1];//等于自己的是根
bool relation[mymax1];//true是必须相同,false是必须相反
int bcj_root(int x);
bool bcj_union(int x,int y);
int main()
{
int a[mymax1],b[mymax1];
int n,m,i,j,temp;
bool truth;
cin>>n>>m;
for(i=0;i<m;i++)
{
cin>>a[i]>>b[i];
if(a[i]>=n || b[i]>=n)
{
cout<<"the evil panda is lying again"<<endl;
return 0;
}
if(a[i]>b[i])
{
temp=a[i];
a[i]=b[i];
b[i]=temp;
}
}
for(i=0;i<m;i++)
{
root[i]=i;
relation[i]=true;
}
truth=true;
for(i=0;i<m && truth;i++)
{
for(j=0;j<i && truth;j++)
{
if( (a[i]-a[j]) * (a[i]-b[j]) * (b[i]-a[j]) * (b[i]-b[j] ) == 0)
{
cout<<"the evil panda is lying again"<<endl;
return 0;
}
else if( (a[i]<a[j]&&b[i]<b[j]&&a[j]<b[i]) || (a[j] < a[i]&&b[j] < b[i]&&a[i]<b[j]))
{
if( !bcj_union(i,j) )
{
truth=false;
}
}
}
}
if(truth) cout<<"panda is telling the truth..."<<endl;
else cout<<"the evil panda is lying again"<<endl;
return 0;
}
int bcj_root(int x)
{
if(root[x]!=x)
{
int temproot=root[x];
root[x]=bcj_root(root[x]);
relation[x]=!(relation[x] ^ relation[temproot]);
}
return root[x];
}
bool bcj_union(int x,int y)
{
if(bcj_root(x)==bcj_root(y) )
{
if( relation[x]==relation[y] ) return false;
else return true;
}
//root[y]=bcj_root(y);
relation[bcj_root(x)]=relation[x]^relation[y];
root[bcj_root(x)]=bcj_root(y);
return true;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator