栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 1733 Parity game

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 1733 Parity game

#include <iostream>#include <cstdio>#include <cstring>using namespace std;struct node{    int num, value, next;};const int maxn = 1000010;int head[maxn], parent[maxn], r[maxn], e, num, n, m, v;node edge[maxn];int hash(int x);int findSet(int x);bool unionSet(int x, int y);int main(){    char s[10];    int hx, hy;    bool flag = false;    e = 0;    num = 0;    memset(head, -1, sizeof(head));    for(int i = 0; i < maxn; i++)        parent[i] = i;    scanf("%d %d", &n, &m);    for(int i = 0; i < m; i++)    {        int x, y;        scanf("%d %d %s", &x, &y, s);        v = 0;        if(s[0] == 'o') v = 1;        hx = hash(x - 1);        hy = hash(y);        if(unionSet(hx, hy))        { if((r[hx] ^ r[hy]) != v) {     printf("%dn", i);     flag = true;     break; }        }    }    if(!flag)        printf("%dn", m);    return 0;}int hash(int x){    int h = x % maxn;    for(int i = head[h]; i != -1; i = edge[i].next)    {        if(x == edge[i].value) return edge[i].num;    }    edge[e].value = x;    edge[e].num = num++;    edge[e].next = head[h];    head[h] = e++;    return (num - 1);}int findSet(int x){    if(x != parent[x])    {        int tmp = findSet(parent[x]);        r[x] ^= r[parent[x]];        parent[x] = tmp;    }    return parent[x];}bool unionSet(int x, int y){    int px = findSet(x), py = findSet(y);    if(px != py)    {        parent[py] = px;        r[py] = r[x] ^ r[y] ^ v;        return false;    }    return true;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372180.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号