CF228E 题解

题目简述

给定一个 \(n\) 个点,\(m\) 条边的无向图,每条边都为 \(0\) 或 \(1\),可以进行若干次操作,与此点相连的所有点权值取反,求一种方案使得所有边都变为 \(1\)。

前置知识

  • 二分图
  • 二分图染色

思路简述

首先明白一点:对于同一条边,操作偶数次是没有必要的!因为最终会回到初始状态。

对于任意一条边 \(i\),有:

若 \(v_i = 0\),则状态为 \((x_i,y_i)=(0,1)\) 或 \((x_i,y_i)=(1,0)\)。

若 \(v_i=1\),则状态为 \((x_i,y_i)= (0,0)\) 或 \((x_i,y_i)=(1,1)\)。

然后我们就可以想到思路了。

用一个 color 数组来存储某个点 \(x\) 是没被染色(color[x]=-1),还是染为黑或白色(color[x] 等于 \(0\) 或 \(1\))。

如果遇到某一条边,两个顶点颜色一样,则输出 Impossible,无解。

否则统计某种颜色的顶点个数,再依次输出即可。

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=105,M=N*(N-1)/2;
int n,m,color[N],u,v,op,cnt_ans;
struct E{
int from,to,pre,co;
}e[M<<1];
int head[N],cnt_e;
void add(int from,int to,int co)
{
e[++cnt_e].from=from;
e[cnt_e].to=to;
e[cnt_e].pre=head[from];
e[cnt_e].co=co;
head[from]=cnt_e;
return;
}
void dfs(int u,int co)
{
color[u]=co;
for(int i=head[u];i;i=e[i].pre)
{
int v=e[i].to,col=e[i].co;
if(!col)
{
if(color[v]==-1)
dfs(v,co^1);
else
{
if(color[v]==color[u])
{
printf("Impossible\n");
exit(0);
}
}
}
else
{
if(color[v]==-1)
dfs(v,co);
else
if(color[u]!=color[v])
printf("Impossible\n"),exit(0);
}
}
return;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
color[i]=-1;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&op);
add(u,v,op);
add(v,u,op);
}
for(int i=1;i<=n;i++)
if(color[i]==-1)
dfs(i,0);
for(int i=1;i<=n;i++)
if(!color[i])
++cnt_ans;
printf("%d\n",cnt_ans);
for(int i=1;i<=n;i++)
if(!color[i])
printf("%d ",i);
puts("");
return 0;
}

CF228E 题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. THINKPHP的CURD是什么意思?

    thinkphp的CURD是什么意思? 解释如下: 增:C    Create   在thinkphp的代码里面对应的方法是add(); 改:U   Update  在thinkphp的代码里面对应的 ...

  2. leetcode简单(设计):[225, 232, 303, 703, 705, 706, 933, 1603, 1656, 09, 30, 041, 03.06]

    目录 225. 用队列实现栈(先入后出) 232. 用栈实现队列(先入先出) 303. 区域和检索 - 数组不可变 703. 数据流中的第 K 大元素 705. 设计哈希集合 706. 设计哈希映射 ...

  3. [oeasy]python0033_任务管理_jobs_切换任务_进程树结构_fg

    ​ 查看进程 回忆上次内容 上次先进程查询 ps -elf 查看所有进程信息 ps -lf 查看本终端相关进程信息 杀死进程 kill -9 PID 给进程发送死亡信号 运行多个 python3 sh ...

  4. 浅谈Git架构和如何避免代码覆盖的事故

    浅谈Git架构和如何避免代码覆盖的事故 Git 不同于 SVN 的地方在于, Git 是分布式的版本管理系统, 所有的客户端和服务器都保存了一份代码, 涉及到仓库仓之间的同步, 所以处理不当极易造成冲 ...

  5. VScode配置PHP开发环境

    vscode配置php开发环境 使用vscode配置PHP开发环境,首先要下载vscode, vscode下载 下载完vscode之后,可以在扩展里面下载中文版本 将vscode下载完之后,需要下载x ...

  6. 【Scala】07 集合

    分三大类: 序列 Seq 集 Set 映射 Map 所有集合类型都扩展自Iterable特质(可迭代的) 所有集合类型都提供[可变]和[不可变]的版本 归纳在下面两个包中 scala.collecti ...

  7. douyin 今日头条 巨量登录滑块和douyin详情滑块分析

    声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容.敏感网址.数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均 ...

  8. 韩国网费比其他国家贵10倍?—— 因网费太高,直播平台 Twitch 宣布2024年2月退出韩国市场

    看新闻,说直播平台 Twitch因为韩国的网费太贵宣布退出韩国,这个新闻给我看纳闷了,从来么有听说过哪个视频或直播公司因为网费贵而关停,这个估计是这种原因关停的第一家吧,于是比较好奇. 相关: htt ...

  9. 说说"铁马冰河"事件

    地址: https://baike.baidu.com/item/%E9%93%81%E9%A9%AC%E5%86%B0%E6%B2%B3/60313943?fr=aladdin 其实也没有什么好说的 ...

  10. NVIDIA显卡cuda的多进程服务——MPS(Multi-Process Service)

    相关内容: tensorflow1.x--如何在C++多线程中调用同一个session会话 tensorflow1.x--如何在python多线程中调用同一个session会话 参考: https:/ ...