zoukankan      html  css  js  c++  java
  • poj 1733离散化(map)+并查集

    http://blog.sina.com.cn/s/blog_803d08c00100y2yy.html

    #include<stdio.h>
    #include<iostream>
    #include<map>
    using namespace std;
    const int N =10010;
    struct node {
    int count,x;
    }pre[N];
    int find(int n) {
    if(n!=pre[n].x) {
    int h=pre[n].x;
    pre[n].x=find(pre[n].x);
    pre[n].count=(pre[n].count+pre[h].count)%2;
    }
    return pre[n].x;
    }
    int Union(int x,int y,int d) {
       int a=find(x);
       int b=find(y);
       if(a==b) {
      if((d+pre[y].count+pre[x].count)%2==0)//判断是否是真
      return 1;
      return 0;
       }
       else {
      pre[a].x =b;
      pre[a].count=(pre[x].count+pre[y].count+d)%2;//
      return 1;
       }
    }
    int main() {
    int n,m,a,b,c,i,num,x,y,d,count,flag;
    char s[6];
           scanf("%d%d",&n,&m);
    map<int,int>hash;//离散化
    for(i=0;i<=10000;i++) {
    pre[i].x=i;
    pre[i].count=0;
    }
    flag=0;num=0;count=0;
    while(m--) {
    scanf("%d%d%s",&a,&b,s);
    d=0;
    if(flag)
    continue;
    a--;count++;
    if(hash.find(a)==hash.end())hash[a]=num++;//
    x=hash[a];
    if(hash.find(b)==hash.end())hash[b]=num++;//
    y=hash[b];
    if(s[0]=='o')d=1;
    if(Union(x,y,d)==0)flag=1;
    }
    if(flag)
    count--;
    printf("%d ",count);


    return 0;
    }

  • 相关阅读:
    调试导论
    CSP-S2 2020 游记
    【题解】51nod 1327 棋盘游戏
    基础数学专题复习
    ubuntu 下 zsh 插件及安装方式
    ubuntu 下 Deepin-TIM 折腾笔记
    微服务学习笔记
    使用 Portainer 管理 Docker 笔记(含本地和远程)
    博客收藏
    定制unittest测试报告【转】
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410887.html
Copyright © 2011-2022 走看看