Luogu P3520 [POI2011]SMI-Garbage
题目
把要变边权的边拿出来找Euler回路就行了。正确性显然,因为一条边经过两次相当于对欧拉回路度数的奇偶性没有影响。
然后把一个个小环输出即可,具体的我也不知道怎么输,题目没讲清楚,我按着题解的来的。
#include<cstdio>
#include<cctype>
using namespace std;
namespace IO
{
    char ibuf[(1<<21)+1],obuf[(1<<21)+1],st[15],*iS,*iT,*oS=obuf,*oT=obuf+(1<<21);
    char Get(){return (iS==iT? (iT=(iS=ibuf)+fread(ibuf,1,(1<<21)+1,stdin),(iS==iT? EOF:*iS++)):*iS++);}
    void Flush(){fwrite(obuf,1,oS-obuf,stdout),oS=obuf;}
    void Put(char x){*oS++=x;if(oS==oT)Flush();}
    int read(){int x=0,c=Get();while(!isdigit(c))c=Get();while(isdigit(c))x=x*10+c-48,c=Get();return x;}
    void write(int x,char c){int top=0;if(!x)Put('0');while(x)st[++top]=(x%10)+48,x/=10;while(top)Put(st[top--]);Put(c);}
}
using namespace IO;
const int N=100007,M=1000007;
int n,m,ans[M],num,cnt,head[N],tot=1,ver[M<<1],Next[M<<1],vis[M<<1],deg[N];
void add(int u,int v){ver[++tot]=v,Next[tot]=head[u],head[u]=tot,++deg[u];}
void dfs(int u,int root)
{
    ans[++num]=u,deg[u]-=2;
    for(int i=head[u],v;i;i=Next[i])
    {
	head[u]=i,v=ver[i];
	if(vis[i]) continue;
	vis[i]=vis[i^1]=1;
	if(u^root&&v==root) return (void)(++cnt,ans[++num]=v);
	return dfs(v,root);
    }
}
int main()
{
    n=read(),m=read();
    for(int i=1,u,v,a,b;i<=m;++i)
    {
	u=read(),v=read(),a=read(),b=read();
	if(a^b) add(u,v),add(v,u);
    }
    for(int i=1;i<=n;++i) if(deg[i]&1) return !printf("NIE");
    for(int i=1;i<=n;++i) while(deg[i]) dfs(i,i);
    write(cnt,'\n');
    for(int i=1,j,root,k;i<=num;++i)
    {
	root=ans[i],k=1,++i;
	while(ans[i]^root&&i<=num) ++i,++k;
	write(k,' ');
	for(j=i-k;j<=i;++j) write(ans[j],' ');
	Put('\n');
    }
    return Flush(),0;
}
Luogu P3520 [POI2011]SMI-Garbage的更多相关文章
- 【LOJ#2162】【POI2011】Garbage(欧拉回路)
		[LOJ#2162][POI2011]Garbage(欧拉回路) 题面 LOJ 题解 首先有一个比较显然的结论,对于不需要修改颜色的边可以直接删掉,对于需要修改的边保留.说白点就是每条边要被访问的次数 ... 
- Luogu P3521 [POI2011]ROT-Tree Rotations
		题目链接 \(Click\) \(Here\) 线段树合并,没想到学起来意外的很简单,一般合并权值线段树. 建树方法和主席树一致,即动态开点.合并方法类似于\(FHQ\)的合并,就是把两棵树的信息整合 ... 
- luogu P3522 [POI2011]TEM-Temperature
		这道题暴力做法就是枚举每个起点,然后向后拓展到不能拓展 就像这样(红框是每个位置的取值范围,绿线是你取的值构成的折线) 应该可以发现,左端点往右移的过程中,右端点也只能不动或往右移,所以我们可以每次移 ... 
- Luogu 3521 [POI2011]ROT-Tree Rotations
		BZOJ 2212 从下到上线段树合并. 考虑到每一个子树内部产生的贡献不可能通过换儿子消除,所以一次更换只要看看把哪个儿子放在左边产生的逆序对数少就可以了. 逆序对数可以在线段树合并的时候顺便算出来 ... 
- [LOJ #2162]「POI2011」Garbage
		题目大意:给一张$n$个点$m$条边的无向图,每条边是黑色的或白色的,要求变成一个目标颜色.可以从任意一个点开始,走一个简单环,回到开始的点,所经过的边颜色翻转.可以走无数次.问是否有一个方案完成目标 ... 
- Luogu P3527 [POI2011]MET-Meteors 整体二分
		思路:整体二分 提交:4次 错因:树状数组开的$int$ 题解: 二分操作序列,将仅用$[l,md]$即可满足要求的国家递归到左半边,将仅用$[l,md]$不能满足要求的国家,把他们的要求去掉左半边的 ... 
- [POI2011]Garbage 欧拉回路
		[POI2011]Garbage 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2278 https://loj.ac/problem/216 ... 
- BZOJ2278 : [Poi2011]Garbage
		如果两个环相交,那么相交的部分相当于没走. 因此一定存在一种方案,使得里面的环都不相交. 把不需要改变状态的边都去掉,剩下的图若存在奇点则无解. 否则,每找到一个环就将环上的边都删掉,时间复杂度$O( ... 
- BZOJ2278 [Poi2011]Garbage[欧拉回路求环]
		首先研究环上性质,发现如果状态不变的边就不需要动了,每次改的环上边肯定都是起末状态不同的边且仅改一次,因为如果有一条边在多个环上,相当于没有改,无视这条边之后,这几个环显然可以并成一个大环.所以,我们 ... 
随机推荐
- codeforces297B
			Fish Weight CodeForces - 297B It is known that there are k fish species in the polar ocean, numbered ... 
- Jmeter(十二)常用插件
			一.下载及安装 下载地址:https://jmeter-plugins.org/install/Install/ 下载后文件为一个jar包,将其放入jmeter安装目录下的lib/ext目录,然后重启 ... 
- find命令不递归查询子目录
			[root@dbrg-2 test]# find . ! -name "." -type d -prune -o -type f -name "*.jpg" ... 
- 2018-2019-2 20165215《网络对抗技术》Exp7 网络欺诈防范
			目录 实验目的 实验内容 实验步骤 (一)简单应用SET工具建立冒名网站 (二)ettercap DNS spoof (三)结合应用两种技术,用DNS spoof引导特定访问到冒名网站 基础问题回答 ... 
- Springboot websocket使用
			1)基本概念 1.http与websocket http超文本传输协议,大家都非常熟悉,http有1.0.1.1. 2.0几个版本,从http1.1起,默认都开启了Keep-Alive,保持连接持续性 ... 
- PHP 封装POD 类
			使用POD的过程 //1.造DSN:驱动名:dbname=数据库名;host=服务器地址 $dsn = "mysql:dbname=mydb;host=localhost"; // ... 
- nginx的请求限制
			一.http协议的连接与请求 总结: HTTP请求是建立在一次TCP连接的基础之上. 一次TCP请求至少产生一次HTTP请求. 二.连接限制 limit_conn_module 配置语法: Synta ... 
- java 包引入时*会全部加载吗
			有一个虚拟机参数: -XX:+TraceClassLoading 这两种写法,最终加载的类是一样的. 对比了一下输出的都是618行 
- 八十九:redis之python操作redis
			安装:pip install redis 连接 字符串操作 插入值 获取 删除值 列表操作,更多操作见源码 添加 获取 集合操作,更多操作见源码 哈希操作,更多操作见源码 事务操作:cache.pip ... 
- python 学习笔记(三)根据字典中值的大小对字典中的项排序
			字典的元素是成键值对出现的,直接对字典使用sorted() 排序,它是根据字典的键的ASCII编码顺序进行排序,要想让字典根据值的大小来排序,可以有两种方法来实现: 一.利用zip函数将字典数据转化为 ... 
