原题:

Description

有n个人,编号为1àn,告诉你那些人之间是不友好的。现在,让你将这n个人分成两组,使得每一组之内的人是互相友好的,如果可以分成两组,则输出如何分组的,如果不可以分成两组,那么,输出“IMPOSSIBLE”。

Input

第一行两个整数n和m,1<=n<=50000,0<=m<=500000,分别表示人数以及不友好的人的对数。以下m行每行两个数a,b,表示a与b是不友好的。

Output

如果可以分成两个组,则输出一个方案,第一行为第一组的人的编号,第二行为第二组人的,按升序输出。其中,方案的字典序必须要最小,所谓的方案字典序最小,就是第一行和第二行连接,组成的序列的字典序最小,如果有多种分配方法,取第一个组别人数最多的方案。如果不能分成两组,输出“IMPOSSIBLE”。

Sample Input(relation.in)

5 4

1 4

1 5

2 4

2 5

Sample Output(relation.out)

1 2 3

4 5

样例解释:

有两种方案,1 2 3 和 1 2

4 5     3 4 5

两种方案的字典序相同,取第一组人数最多的方案,所以输出方案一。

题目满足:

40%的数据n<=1000

100%的数据n<=50000,m<=500000

时限 1s

这道题典型的二分图染色(因为分成2组)

当然,根据题目,我们最后要SORT一下输出

并且,方案字典序相同时,取第一组人数最多的方案

所以染色的时候尽量多分配1,不行再回溯修改

下面贴代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct edge{
int to,next;
}g[];
int color[];
int head[],n,m;
bool visit[];
int ans1[],ans2[],num=,num1=,num2=;
void ins(int x,int y){g[++num].next=head[x];head[x]=num;g[num].to=y;}
void insw(int x,int y){ins(x,y);ins(y,x);}
bool dfs(int x){
visit[x]=true;
for(int i=head[x];i;i=g[i].next)
{
if(!visit[g[i].to])
{
color[g[i].to]=color[x]==?:;
visit[g[i].to]=true;
if(!dfs(g[i].to))color[x]=color[x]==?:;
}
else if(color[g[i].to]!=-&&color[g[i].to]==color[x]){color[x]=color[x]==?:;return false;}
}
return true;
}
int main(){
freopen("relation.in","r",stdin);
freopen("relation.out","w",stdout);
memset(color,-,sizeof(color));
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
insw(x,y);
}
bool shuchu=false;
for(int i=;i<=n;i++)
{
if(color[i]==-){color[i]=;if(!dfs(i)){printf("IMPOSSIBLE\n");shuchu=true;break;}}
}
if(!shuchu){
for(int i=;i<=n;i++)
if(color[i]||color[i]==-)ans1[++num1]=i; else ans2[++num2]=i;
sort(ans1+,ans1+num1+);
sort(ans2+,ans2+num2+);
for(int i=;i<num1;i++)
printf("%d ",ans1[i]);
printf("%d\n",ans1[num1]);
for(int i=;i<num2;i++)
printf("%d ",ans2[i]);
printf("%d\n",ans2[num2]);
}
fclose(stdin);
fclose(stdout);
}

Relation(NOIP模拟赛)(二分图染色)的更多相关文章

  1. NOI.AC NOIP模拟赛 第三场 补记

    NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...

  2. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  3. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  4. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  5. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  6. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  7. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  8. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  9. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  10. CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

    A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...

随机推荐

  1. iptables v1.3.5: multiple -d flags not allowed错误已解决

    今天写了一条iptables的规则 iptables -t filter -A INPUT -s 192.168.192.0/24 -d 192.168.192.140 -p tcp -dport 2 ...

  2. Git的使用--将本地项目上传到Github

    Git的使用--将本地项目上传到Github 感谢作者 --> 原文链接 很早之前就注册了Github,但对其使用一直懵懵懂懂,很不熟练.直到昨天做完百度前端技术学院的task,想把代码托管到G ...

  3. sap对字符串的操作

    REPLACE  替换字段内容 TRANSLATE 转换大/小写 FIND FIRST OCCURRENCE OF 查找字符串 替换字段内容 REPLACE [FIRST /ALL OCCURRENC ...

  4. JS实现禁用滑动条但滑动条不消失的效果

    //方法 //滑动条 // left: 37, up: 38, right: 39, down: 40, // spacebar: 32, pageup: 33, pagedown: 34, end: ...

  5. JVM——九大工具助你玩转Java性能优化

    本文转载自 http://www.importnew.com/12324.html 本文由 ImportNew - 陈 晓舜 翻译自 idrsolutions.欢迎加入翻译小组.转载请参见文章末尾的要 ...

  6. Lazarus教程 中文版后续给出

    市面上有介绍Delphi的书籍(近来Delphi的书也是越来越少了),但没有一本系统的介绍Lazarus的书,这本书是网上的仅有的一本Lazarus教程,目前全部是英文,不过我已经着手开始翻译,争取尽 ...

  7. Kotlin中when表达式的使用:超强的switch(KAD 13)

    作者:Antonio Leiva 时间:Feb 23, 2017 原文链接:https://antonioleiva.com/when-expression-kotlin/ 在Java(特别是Java ...

  8. Python全栈 MySQL 数据库 (SQL查询、备份、恢复、授权)

    ParisGabriel              每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图   今天接着昨天的说   索引有4种:      普通 索引 :ind ...

  9. 参加2018之江杯全球人工智能大赛
:视频识别&问答

    学习了一段时间的AI,用天池大赛来检验一下自己的学习成果. 题目:参赛者需对给定的短视频进行内容识别和分析,并回答每一个视频对应的问题.细节请到阿里天池搜索. 两种思路 1 将视频截成一帧一帧的图片, ...

  10. Flex学习笔记

    Flex —— Flexible Box 弹性布局 用来为盒子模型提供灵活性 /* 块级元素 */ .box{ display: flex; } /* 行内元素 */ .box{ display: i ...