zoukankan      html  css  js  c++  java
  • poj1733 Parity game

    参见算法竞赛进阶指南190页

    #include <algorithm>
    #include <iostream>
    #include <cstdio>
    using namespace std;
    int n, m, num[10005], qwq=1, fa[10005], dis[10005];
    char ss[15];
    struct Node{
    	int l, r, ans;
    }nd[5005];
    int myfind(int x){
    	if(x==fa[x])	return x;
    	int rot=myfind(fa[x]);
    	dis[x] ^= dis[fa[x]];
    	return fa[x]=rot;
    }
    int main(){
    	cin>>n>>m;
    	n = 0;
    	for(int i=1; i<=m; i++){
    		scanf("%d %d %s", &nd[i].l, &nd[i].r, ss);
    		nd[i].l--;
    		nd[i].ans = ss[0]=='o';
    		num[++n] = nd[i].l;
    		num[++n] = nd[i].r;
    	}
    	sort(num+1, num+1+n);
    	n = unique(num+1, num+1+n) - num - 1;
    	for(int i=1; i<=m; i++){
    		nd[i].l = lower_bound(num+1, num+1+n, nd[i].l) - num;
    		nd[i].r = lower_bound(num+1, num+1+n, nd[i].r) - num;
    	}
    	for(int i=1; i<=n; i++)	fa[i] = i;
    	for(int i=1; i<=m; i++){
    		int r1=myfind(nd[i].l), r2=myfind(nd[i].r);
    		if(r1==r2){
    			if(nd[i].ans!=(dis[nd[i].l]^dis[nd[i].r]))	break;
    		}
    		else{
    			fa[r1] = r2;
    			dis[r1] = dis[nd[i].l] ^ dis[nd[i].r] ^ nd[i].ans;
    		}
    		qwq++;
    	}
    	printf("%d
    ", qwq-1);
    	return 0;
    }
    

    另一种写法

    #include <algorithm>
    #include <iostream>
    #include <cstdio>
    using namespace std;
    int n, m, num[10005], fa[20005];
    char ss[15];
    struct Node{
    	int l, r, ans;
    }nd[5005];
    int p(int x){
    	return x;
    }
    int q(int x){
    	return x+n;
    }
    int myfind(int x){
    	return fa[x]==x?x:fa[x]=myfind(fa[x]);
    }
    int main(){
    	cin>>n>>m;
    	n = 0;
    	for(int i=1; i<=m; i++){
    		scanf("%d %d %s", &nd[i].l, &nd[i].r, ss);
    		nd[i].l--;
    		nd[i].ans = ss[0]=='o';
    		num[++n] = nd[i].l;
    		num[++n] = nd[i].r;
    	}
    	sort(num+1, num+1+n);
    	n = unique(num+1, num+1+n) - num - 1;
    	for(int i=1; i<=m; i++){
    		nd[i].l = lower_bound(num+1, num+1+n, nd[i].l) - num;
    		nd[i].r = lower_bound(num+1, num+1+n, nd[i].r) - num;
    	}
    	for(int i=1; i<=n+n; i++)	fa[i] = i;
    	for(int i=1; i<=m; i++){
    		int uu=nd[i].l, vv=nd[i].r;
    		if(myfind(p(uu))==myfind(q(vv)) || myfind(p(uu))==myfind(p(vv))){
    			if(nd[i].ans!=(myfind(p(uu))==myfind(q(vv)))){
    				cout<<i-1<<endl;
    				return 0;
    			}
    		}
    		else{
    			if(nd[i].ans){
    				fa[myfind(p(uu))] = myfind(q(vv));
    				fa[myfind(q(uu))] = myfind(p(vv));
    			}
    			else{
    				fa[myfind(p(uu))] = myfind(p(vv));
    				fa[myfind(q(uu))] = myfind(q(vv));
    			}
    		}
    	}
    	cout<<m;
    	return 0;
    }
    
  • 相关阅读:
    bootstrap-table对前台页面表格的支持
    解决拦截器对ajax请求的的拦截
    jQuery获取鼠标事件源(万能)
    HtmlAgilityPack 处理通配的contains
    【转】XPath的学习
    在IIS服务器上部署svg/woff/woff2字体
    【转】万网域名查询接口(API)的说明
    html5和css3的常用参考网
    【转】Xml序列化
    C#序列化s实体类成Xml,去除空格、换行符以及命名空间
  • 原文地址:https://www.cnblogs.com/poorpool/p/8457418.html
Copyright © 2011-2022 走看看