vijos奇偶性(并查集)

#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn=1e6+5;
map d;
int fa[maxn],a[maxn],b[maxn],n,m,x[maxn];
bool c[maxn];
char s[10];
int find(int x){
 return fa[x]==x?fa[x]:fa[x]=find(fa[x]);
}
int main(){
 //奇数==1
 scanf("%d%d",&n,&m);
 int cur=0;
 for(int i=1;i<=m;i++){
  scanf("%d%d%s",&a[i],&b[i],s);
  --a[i];
  x[++cur]=a[i]; x[++cur]=b[i];
  if(s[0]=='e') c[i]=false;
  else c[i]=true;
 }
 sort(x+1,x+1+cur);
 int cnt=0;
 for(int i=1;i<=cur;i++){
  if(i==1){
   ++cnt; d[x[i]]=cnt; continue;
  }
  if(x[i]==x[i-1]){
   d[x[i]]=cnt;
   continue;
  }
  ++cnt;
  d[x[i]]=cnt;
 }
 /*for(int i=1;i<=m;i++){
  cout<  }*/
 for(int i=1;i<=3*cnt;i++) fa[i]=i;
 for(int i=1;i<=m;i++){
  int fx=find(d[a[i]]),fy=find(d[b[i]]),
  nx=find(d[a[i]]+cnt),ny=find(d[b[i]]+cnt);
  //cout<   if(c[i]){
   if(fx==ny){
    cout<     return 0;
   }  
   else{
    fa[fx]=fy; fa[nx]=ny;
   }
  }
  else{
   if(fx==fy){
    cout<    }
   else{
    fa[fy]=nx; fa[fx]=ny;
   }
  }
 }
 cout<  return 0;
}

你可能感兴趣的:(vijos奇偶性(并查集))