首页 > 其他分享 >Split Into Two Sets CodeForces - 1702E

Split Into Two Sets CodeForces - 1702E

时间:2022-09-23 09:22:14浏览次数:61  
标签:二分 多米诺骨牌 int Into CodeForces Two color 测试用例 骨牌

Split Into Two Sets CodeForces - 1702E

Polycarp 有一副有 n 张牌的(数字 n 为偶数) 多米诺骨牌. 每张多米诺骨牌上写有两个在 1 到 n 之间的数字.
请问能否把骨牌分成两副,使得每一副骨牌中都没有重复的数字?
所有骨牌都必须被分到其中一副中,且两副骨牌的数量相同。
例如, 假如他有 4 张多米诺骨牌: {1,4}, {1,3}, {3,2} 和 {4,2},
可以将第 1,3 张骨牌分给第一副 ({1,4}和 {3,2}),然后第 2,4 张分给第二副({1,3}和 {4,2})。
提示:可能出现 {1,2}, {2,3}, {3,1}, {4,1} 这样的 4 张骨牌,显然这样的一副骨牌无法按条件分成两副

Input

第一行包含一个整数 t(1≤t≤1e4) — 测试用例的数量。
测试用例的描述如下。
每个测试用例的第一行包含一个偶数 n(2≤n≤2e5) — 多米诺骨牌的数量。
下一个 n 行包含成对的数字 ai,bi — 描述多米诺骨牌上的数字。
保证所有测试用例中 n 的总和不超过 2e5。

Output

对于每个测试用例打印:
如果可以将 n 个多米诺骨牌分为两组,以便每组多米诺骨板上的数字不同,输出 "YES";否则输出 "NO"。

Sample Input

6
4
1 2
4 3
2 1
3 4
6
1 2
4 5
1 3
4 6
2 3
5 6
2
1 1
2 2
2
1 2
2 1
8
2 1
1 2
4 3
4 3
5 6
5 7
8 6
7 8
8
1 2
2 1
4 3
5 3
5 4
6 7
8 6
7 8

Sample Output

YES
NO
NO
YES
YES
NO

分析

考察内容:二分图的判定

二分图:是指可以将图中点集分为相连的两部分,且每部分内部互不相连。

判断一个图是否为二分图,等价于 判断图中是否有长度为奇数的环,等价于 图是否可以被二染色。
如果没有奇环,则图为二分图。

可以使用染色法,先该点染红,则与之相连的各个邻居都染蓝,邻居的邻居继续染红,直到所有点都染完,就是一个二分图;如果出现染色冲突,则不是二分图。

图染色问题:问是否可以给每个点染上一种颜色,对于所有边老说,边上的两个点颜色均不同。

  • 下列程序出现问题,怀疑是多组数据导致的,但是我已经初始化了,想不到问题在哪里
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=2e5+10,INF=0x3f3f3f3f;
vector<int> G[N], color(N);
int is_two_colorable=1;

void dfs(int u,int c){
    for(vector<int>::iterator it=G[u].begin(); it!=G[u].end(); it++){
        int v=*it, nc=3-c;    // u 的邻居 v 应该染上的色 nc
        if(color[v]){         // 邻居染过色
            if(color[v]!=nc){ // 发生冲突
                is_two_colorable=0; return;
            }
        }else{ // 给它染色
            color[v] = nc;
            dfs(v, color[v]);
        }
    }
}
int main(){
    freopen("data.in", "r", stdin);
    int t,n,u,v; scanf("%d", &t);
    while(~scanf("%d", &n)){
        for(int i=0; i<N; i++) G[i].clear();
        //memset(G, 0, sizeof(G));
        color.clear(), is_two_colorable=1;
        for(int i=1; i<=n; i++) scanf("%d%d", &u,&v),
        G[u].push_back(v), G[v].push_back(u);
        for(u=1; u<=n; u++){
            if(!color[u]){ // u 还未染色
                color[u]=1, dfs(u, color[u]);
            }
        }
        printf("%s\n", is_two_colorable ? "YES" : "NO");
    }
    return 0;
}

标签:二分,多米诺骨牌,int,Into,CodeForces,Two,color,测试用例,骨牌
From: https://www.cnblogs.com/hellohebin/p/16721222.html

相关文章

  • 【2022】【Reinforcement learning in urban network traffic signal control: A syst
    本篇综述主要介绍两个或多个路口路网的基于强化学习的交通信号灯控制,覆盖了1994年至2022年来自20个国家的160多篇文章。具体内容有:AreviewonReinforcementLearning......
  • Boy or Girl CodeForces - 236A
    BoyorGirlCodeForces-236A如果一个人的用户名中不同的字符数是奇数,那么他就是一个男性,否则她就是一个女性(鬼知道为什么)。给你一个表示用户名的字符串,请帮助小A确定这......
  • Codeforces Round #811
    目录写在前面ABCDEFG写在最后写在前面比赛地址:https://codeforces.com/contest/1714。没什么整理价值的题,但是markdown语法及博客文风复健。A\(t\)组数据,每组数据......
  • Pair of Topics CodeForces - 1324D
    PairofTopicsCodeForces-1324D你有两个长度为n的数列a和b。现在我们定义,若存在i和j,满足:(i<j)且(a[i]+a[j]>b[i]+b[j]),则我们称数对<i,j>为JNU数对你的目......
  • Codeforces Round #298 (Div. 2) - D. Handshakes
    贪心+构造题意有\(n(1<=n<=2*10^5)\)个人,每分钟有一个人进入房间,房间里任意3个人可以组队开始工作并一直持续下去,且只要房间里至少有3个人,他们就可以在任意时间......
  • Codeforces Round #814
    难得遇上一把CF,结果unr了。AMainakandArray显然最优策略只有三种:选一个\(i\in[1,n-1]\)的\(a_i\)作为\(a_1\);选一个\(i\in[2,n]\)的\(a_i\)作为\(a......
  • [AAAI 2022]Graph Convolutional Networks with Dual Message Passing for Subgraph I
    总结GNN实现子图匹配。利用线图(边变点)让模型训练时将点和边的特征反复映射到对方领域参与训练。定义常规符号Graph,Edge,Vertex,。X,Y表示点标签和边标签:\(\mathca......
  • Polycarp Writes a String from Memory CodeForces - 1702B
    PolycarpWritesaStringfromMemoryCodeForces-1702B给定大小为n的字符串,至多每3种不同的字母分为一组,最少将字符串分为多少组?Input第一行输入数据包含一个整......
  • Jzzhu and Children CodeForces - 450A
    JzzhuandChildrenCodeForces-450A有n个孩子在老师的学校上学。老师决定给这些孩子一些苹果。让我们将所有孩子编号为1到n。第i个孩子想要获得至少ai的苹果......
  • CodeForces-189A Cut Ribbon-必须装满的背包
    题意:给定n,s.t. a1*x1+a2*x2+a3*x3=n(1)max:x1+x2+x3对比完全背包,(1)式取等号而不是<=这个差别影响了我们的结果比如:n=7,a1=a2=5,a3=2如果按照完全背包的转移:则在dp[7......