zoukankan      html  css  js  c++  java
  • codechef September Challenge 2017 Fill The Matrix

    这道题我们发现0就代表相同1代表少1或者大1 

    那么我们根据题目连边 如果存在1(边权只为或0)个数为奇数的环就是无解

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    const int M=1e6+7;
    int read(){
        int ans=0,f=1,c=getchar();
        while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();}
        return ans*f;
    }
    int T,n,q,vis[M],c[M];
    int first[M],cnt;
    bool f;
    struct node{int to,next,s;}e[2*M];
    void ins(int a,int b,int s){e[++cnt]=(node){b,first[a],s}; first[a]=cnt;}
    void insert(int a,int b,int s){ins(a,b,s); ins(b,a,s);}
    void clear(){
        f=true; cnt=1;
        memset(c,0,4*(n+1));
        memset(first,0,4*(n+1));
        memset(vis,0,4*(n+1));
    }
    void dfs(int x){
        if(!f) return ; vis[x]=1;
        for(int i=first[x];i;i=e[i].next){
            int now=e[i].to;
            if(vis[now]){
                if(e[i].s&&c[now]==c[x]) return void(f=false);
                if(!e[i].s&&c[now]!=c[x]) return void(f=false);
            }
            else c[now]=c[x]^e[i].s,dfs(now);
        }
    }
    int main(){
        T=read();
        while(T--){
            int x,y,s;
            n=read(); q=read(); clear();
            for(int i=1;i<=q;i++) x=read(),y=read(),s=read(),insert(x,y,s);
            for(int i=1;i<=n;i++)if(!vis[i]) dfs(i);
            if(f) printf("yes
    ");
            else printf("no
    ");
        }
        return 0;
    } 
    View Code
  • 相关阅读:
    Geoserver通过ajax跨域访问服务数据的方法(含用户名密码认证的配置方式)
    123
    递归____蛮好的例子 蓝桥
    博弈_____威佐夫博奕
    123123
    sort
    int ,long , long long类型的范围
    数学推导_循环小数转分数
    下一步:结构体 背包 库函数
    回溯____蓝桥 棋盘
  • 原文地址:https://www.cnblogs.com/lyzuikeai/p/7522259.html
Copyright © 2011-2022 走看看