AIM Tech Round (Div. 2) C. Graph and String 二分图染色

转载 2016年08月29日 08:34:17

转载自:http://www.cnblogs.com/qscqesze/p/5183085.html

题意

给你一个图,然后让你给这些图标号,问你有没有一个合法的标号

标号就只能标a,b,c。

然后a会和ab连边,b和abc都连边,c和bc连边

有解就任意输出一个就好

题解:

我们首先把那种边集有n-1的点染成b,然后再随便选一个没有染成b的点当成a,然后和a连边的就是a,没有和a连边的就是c

扫一遍就可以确认所有点的颜色,最后再n^2check一发就好了

#include<bits/stdc++.h>
using namespace std;


int mp[520][520];
int cnt[520];
int flag[520];
int n,m;
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        mp[x][y]=1;
        mp[y][x]=1;
        cnt[x]++;
        cnt[y]++;
    }
    for(int i=1;i<=n;i++)
        if(cnt[i]==n-1)
            flag[i]=2;
    int now=0;
    for(int i=1;i<=n;i++)
        if(flag[i]!=2)
        {
            now=i;
            break;
        }
    if(now==0)
    {
        printf("Yes\n");
        for(int i=1;i<=n;i++)
            cout<<"b";
        cout<<endl;
        return 0;
    }
    flag[now]=1;
    for(int i=1;i<=n;i++)
    {
        if(now==i)continue;
        if(!mp[i][now])flag[i]=3;
        else if(flag[i]==0)flag[i]=1;
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(i==j)continue;
            if(mp[i][j])
            {
                if(abs(flag[j]-flag[i])>1)
                    return puts("No");
            }
            else
            {
                if(abs(flag[j]-flag[i])<=1)
                    return puts("No");
            }
        }
    }
    printf("Yes\n");
    for(int i=1;i<=n;i++)
        if(flag[i]==1)printf("a");
        else if(flag[i]==2)printf("b");
        else printf("c");
    printf("\n");
}


「美团 CodeM 初赛 Round A」二分图染色 容斥原理

题目链接点这里 首先绿色不用管 然后只有2种颜色,很显然需要用容斥原理求,先算全部的数量,然后容斥减去不合法的数目 我们n个点设单种颜色的方案数为F(n),所以2种颜色的方案数就是F(n)^2(...
  • qq_30927651
  • qq_30927651
  • 2017年06月21日 13:22
  • 282

[两道递推题] 美团 CodeM 初赛 Round A 二分图染色 & OEIS A001499

好久没做过n=107n=10^7这种正常的递推题了二分图染色转化为棋盘模型,即 N×NN\times N 棋盘上放黑白棋子,每个格子至多放一个,同行同列没有相同颜色的棋子。 令bnb_n为只有一种颜...
  • u014609452
  • u014609452
  • 2017年06月26日 20:44
  • 343

Codeforces Round #406 (Div. 2):C. Berzerk(记忆化搜索解决博弈问题)

C. Berzerk time limit per test 4 seconds memory limit per test 256 megabytes input standard in...
  • Jaihk662
  • Jaihk662
  • 2017年03月24日 15:23
  • 796

HDU2444 二分图判断(BFS 的染色法) + 求最大匹配边数(DFS 的匈牙利算法)

0)二分图匹配有两种算法,一种是网络流中的最大流,另一种就是下面的匈牙利算法。 ①用染色法判断是否是二分图:     主要是怎么判断一个图是不是二分图。不妨选取某个点作为起点并染为某种颜色、同时把...
  • a272846945
  • a272846945
  • 2016年05月07日 19:55
  • 1404

hdu 3478 Catch【并查集+二分图染色】

Catch Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...
  • mengxiang000000
  • mengxiang000000
  • 2016年04月29日 14:49
  • 794

南阳理工1015 (染色法判断二分图)

【二分图简介】 二分图:简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。 准确地说:把一个图的顶点划分为两个不相交集 X 和 Y ,使得每一条边都分别连接X ...
  • chaiwenjun000
  • chaiwenjun000
  • 2015年08月14日 16:47
  • 1456

【CodeM初赛A 6】二分图染色 题解

转自https://www.nowcoder.com/discuss/28582 题目大意      ~~~~~~一幅有 n 个点的完全二分图,你要给每条边染色,可以染红、蓝、绿三种颜色,要求任意两条...
  • rzO_KQP_Orz
  • rzO_KQP_Orz
  • 2017年06月20日 20:55
  • 284

【Codeforces Round 375 (Div 2) E】【欧拉回路Fleury算法 或网络流】One-Way Reform 每条边定向使得最多的点满足入度=出度

E. One-Way Reform time limit per test 2 seconds memory limit per test 256 megabytes ...
  • snowy_smile
  • snowy_smile
  • 2016年10月04日 10:20
  • 736

C++:二分图染色法---双栈排序

题目如下: sicily 1002. 双栈排序 Description Tom最近在研究一个有趣的排序问题。如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序。操作...
  • linwh8
  • linwh8
  • 2016年09月21日 14:06
  • 2751

判断二分图 bfs

描述 二部图又叫二分图,我们不是求它的二分图最大匹配,也不是完美匹配,也不是多重匹配,而是证明一个图是不是二部图。证明二部图可以用着色来解决,即我们可以用两种颜色去涂一个图,使的任意相连的两个顶点颜...
  • yslcl12345
  • yslcl12345
  • 2016年02月16日 11:11
  • 600
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AIM Tech Round (Div. 2) C. Graph and String 二分图染色
举报原因:
原因补充:

(最多只允许输入30个字)