cf623A. Graph and String(二分图 构造)

题意

题目链接

Sol

可以这样考虑,在原图中没有边相连的点的值肯定是a / c

那么直接二分图染色即可

#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int MAXN = 1001, INF = 1e9 + 10;
inline int read() {
    char c = getchar(); int x = 0, f = 1;
    while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
    while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}
int N, M, mp[MAXN][MAXN], col[MAXN], inder[MAXN];
bool flag = 1;
void dfs(int x) {
    for(int i = 1; i <= N; i++)
        if(!mp[x][i])
            if(col[i] == -1) col[i] = col[x] ^ 1, dfs(i);
}
int main() {
    N = read(); M = read();
    for(int i = 1; i <= N; i++) mp[i][i] = 1;
    for(int i = 1; i <= M; i++) {
        int x = read(), y = read();
        mp[x][y] = mp[y][x] = 1;
    }
    for(int i = 1; i <= N; i++)
        for(int j = i + 1; j <= N; j++)
            if(!mp[i][j]) inder[i]++, inder[j]++;
    memset(col, -1, sizeof(col));
    for(int i = 1; i <= N; i++) if(col[i] == -1) col[i] = 0, dfs(i);
    for(int i = 1; i <= N; i++) {
        for(int j = i + 1; j <= N; j++) {
            if(!mp[i][j] && (col[i] == col[j])) {puts("NO"); return 0;}
            if(mp[i][j] && inder[i] && inder[j] && (col[i] != col[j])) {puts("NO"); return 0;}
        }
    }
    puts("Yes");
    for(int i = 1; i <= N; i++)
        if(inder[i] == 0) putchar('b');
        else if(col[i] == 1) putchar('c');
        else putchar('a');
    return 0;
}

原文地址:https://www.cnblogs.com/zwfymqz/p/10197225.html

时间: 2024-11-14 11:59:18

cf623A. Graph and String(二分图 构造)的相关文章

CF623A Graph and String

CF623A Graph and String 休闲的题目. WA了5次,hack数据爽的一批. 考虑补图. 显然,补图中,出度为0的点是B. 然后二分图染色. 如果不是二分图,就输出"No" 染完色后,看看是否满足数据即可 写的太丑了,捂脸. /*header*/ #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include

codeforces 623A. Graph and String 构造

题目链接 给出一个图, 每个节点只有三种情况, a,b, c. a能和a, b连边, b能和a, b, c,连边, c能和b, c连边, 且无重边以及自环.给出初始的连边情况, 判断这个图是否满足条件. 由题意可以推出来b必然和其他的n-1个点都有连边, 所以初始将度数为n-1的点全都编号为b. 然后任选一个与b相连且无编号的点, 编号为1. 然后所有与1无连边的点都是3. 然后O(n^2)检查一下是否合理. #include <iostream> #include <vector>

hdoj 3820 Golden Eggs 【双二分图构造最小割模型】

Golden Eggs Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 505    Accepted Submission(s): 284 Problem Description There is a grid with N rows and M columns. In each cell you can choose to put

HDU-4850 Wow! Such String! (构造)

Problem Description Recently, doge starts to get interested in a strange problem: whether there exists a string A following all the rules below: 1.The length of the string A is N . 2.The string A contains only lowercase English alphabet letters. 3.Ea

[LeetCode] Is Graph Bipartite? 是二分图么?

Given an undirected graph, return true if and only if it is bipartite. Recall that a graph is bipartite if we can split it's set of nodes into two independent subsets A and B such that every edge in the graph has one node in A and another node in B.

P1640 [SCOI2010]连续攻击游戏 二分图构造

https://www.luogu.org/problemnew/show/P1640 题意 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备最多只能使用一次.游戏进行到最后,lxhgww遇到了终极boss,这个终极boss很奇怪,攻击他的装备所使用的属性值必须从1开始连续递增地攻击,才能对boss产生伤害.也就是说一开始的时候,lxhgww只能使用某个属

C. Graph and String

二分图染色 b点跟除自身外所有的点连接,共n-1个,首先把连接n-1个的点全部设为b点,其它点任意一点设为a,与a相连的都是a点,剩余为c点.最后验证是否成立. 验证条件为,所有连接的点之间的差值的绝对值不超过1,未连接的点之间的差值的绝对值都大于1. 1 #include<bits/stdc++.h> 2 #include<stdlib.h> 3 #include<math.h> 4 using namespace std; 5 int mp[520][520]; 6

Codeforces 715B. Complete The Graph 最短路,Dijkstra,构造

原文链接https://www.cnblogs.com/zhouzhendong/p/CF715B.html 题解 接下来说的“边”都指代“边权未知的边”. 将所有边都设为 L+1,如果dis(S,T) < L ,那么必然无解. 将所有边都设为 1 ,如果 dis(S,T) > L ,那么必然无解. 考虑将任意一条边的权值+1,则 dis(S,T) 会 +0 或者 +1 . 如果将所有边按照某一个顺序不断+1,直到所有边的权值都是L+1了,那么在这个过程中,dis(S,T) 是递增的,而且一定

Edge coloring of bipartite graph CodeForces - 600F (二分图染色)

大意:给定二分图, 求将边染色, 使得任意邻接边不同色且使用颜色种类数最少 最少颜色数即为最大度数, 要输出方案的话, 对于每一条边(u,v), 求出u,v能使用的最小的颜色$t0$,$t1$ 若t0=t1, 直接染就行不会有冲突, 否则就染为t0, 这样的话可能产生冲突, 就将冲突的边换成t1, 依次递归下去 由于二分图的性质, 最终一定可以找到一条边不冲突 #include <iostream> #include <algorithm> #include <cstdio&