题目大意:给一张$n$个点$m$条边的无向图,每条边是黑色的或白色的,要求变成一个目标颜色。可以从任意一个点开始,走一个简单环,回到开始的点,所经过的边颜色翻转。可以走无数次。问是否有一个方案完成目标。有则输出任意方案。

题解:不用改变颜色的边不用管,因为可以通过走两个环使得这条边经过两次,而剩下的部分会拼成一个大环。

即要求是找互不相交的环,使得构成整张图

卡点:1.输出格式要求起点输出两次

  2.找到环后不可以退出

C++ Code:

#include <cstdio>
#include <vector>
#define maxn 100010
#define maxm 1000010
int head[maxn], cnt = 1;
struct Edge {
int to, nxt;
bool vis;
} e[maxm << 1];
inline void add(int a, int b) {
e[++cnt] = (Edge) {b, head[a], false}; head[a] = cnt;
} int n, m, ind[maxn];
int CNT, num[maxn];
std::vector<int> ans[maxn];
int S[maxn], top;
bool ins[maxn];
void dfs(int u) {
int v;
if (ins[u]) {
CNT++;
do {
num[CNT]++;
ins[v = S[top--]] = false;
ind[v] -= 2;
ans[CNT].push_back(v);
} while (v != u);
}
ins[S[++top] = u] = true;
for (int &i = head[u]; i; i = e[i].nxt) {
if (!e[i].vis) {
v = e[i].to;
e[i].vis = e[i ^ 1].vis = true;
dfs(v);
return ;
}
}
ins[u] = false;
} int main() {
scanf("%d%d", &n, &m);
for (int i = 0, a, b, c, d; i < m; i++) {
scanf("%d%d%d%d", &a, &b, &c, &d);
if (c != d) {
ind[a]++, ind[b]++;
add(a, b);
add(b, a);
}
}
for (int i = 1; i <= n; i++) if (ind[i] & 1) {
puts("NIE");
return 0;
}
for (int i = 1; i <= n; i++) while (ind[i]) dfs(i);
printf("%d\n", CNT);
for (int i = 1; i <= CNT; i++) {
printf("%d", num[i]);
for (int j = 0; j < num[i]; j++) printf(" %d", ans[i][j]);
printf(" %d\n", ans[i][0]);
}
return 0;
}

  

[LOJ #2162]「POI2011」Garbage的更多相关文章

  1. LOJ#2170. 「POI2011」木棍 Sticks

    题目链接 题意就是给你一堆线段,然后线段有长度和颜色,让你选三条组成一个三角形,这三条线段颜色不能一样 题解: 做法:贪心 首先按照长度给这些线段排序一遍 然后贪心的去选,对于已经选出来同种颜色的,就 ...

  2. Loj #2192. 「SHOI2014」概率充电器

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  3. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  4. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

  5. Loj #3089. 「BJOI2019」奥术神杖

    Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...

  6. Loj #2542. 「PKUWC2018」随机游走

    Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...

  7. Loj #3059. 「HNOI2019」序列

    Loj #3059. 「HNOI2019」序列 给定一个长度为 \(n\) 的序列 \(A_1, \ldots , A_n\),以及 \(m\) 个操作,每个操作将一个 \(A_i\) 修改为 \(k ...

  8. Loj #3056. 「HNOI2019」多边形

    Loj #3056. 「HNOI2019」多边形 小 R 与小 W 在玩游戏. 他们有一个边数为 \(n\) 的凸多边形,其顶点沿逆时针方向标号依次为 \(1,2,3, \ldots , n\).最开 ...

  9. Loj #3055. 「HNOI2019」JOJO

    Loj #3055. 「HNOI2019」JOJO JOJO 的奇幻冒险是一部非常火的漫画.漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」. 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 ...

随机推荐

  1. yii2 url 美化参数

    所谓的url参数美化就是将冗长的字符串 进行正则替换 yii2 框架的url参数美化完成需要完成两个阶段 第一个阶段分apache和nginx 两种的配置 apache :1.1 必须开启rewrit ...

  2. PLY手册翻译

    https://www.kancloud.cn/kancloud/ply/42143 http://wiki.jikexueyuan.com/project/python-lex-yacc/ply-0 ...

  3. js按钮点击事件

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. Android面试收集录10 LruCache原理解析

    一.Android中的缓存策略 一般来说,缓存策略主要包含缓存的添加.获取和删除这三类操作.如何添加和获取缓存这个比较好理解,那么为什么还要删除缓存呢?这是因为不管是内存缓存还是硬盘缓存,它们的缓存大 ...

  5. Apache 多端口配置方法

    首先修改httpd.conf配置文件. 添加8080端口 Listen 8080 打开虚拟配置文件 # Virtual hosts Include conf/extra/httpd-vhosts.co ...

  6. python的高阶函数与匿名函数

    一.高阶函数的定义 高阶函数:就是把函数当成参数传递的一种函数,例如: def add(x,y,f): return f(x)+f(y) print(add(-8,11,abs) 结果:19 解释: ...

  7. windows下使用Python出现No module named tkinter.ttk

    1. 编辑工具使用Pycharm,windows平台,运行的时候报错误 2. 目前用的是Python2.7版本,对比了一下已有的库,名字不太一样,因此换成Python3.6的测试一下暂时没这个问题了. ...

  8. 你是怎么封装一个view的

    可以通过纯代码或者xib的方式来封装子控件 建立一个跟view相关的模型,然后将模型数据传给view,通过模型上的数据给view的子控件赋值 /** * 纯代码初始化控件时一定会走这个方法 */ - ...

  9. python学习笔记二:流程控制

    一.if else: #!/usr/bin/python x = int(raw_input('please input:')) if x >= 90: if x >= 95: print ...

  10. 在cmd运行脚本

    1.打开cmd 2.cd到脚本目录,运行所有脚本的上级目录,我的是cd C:\Users\Administrator\PycharmProjects\webtest\TestSuit 3.使用Pyth ...