如果两个环相交,那么相交的部分相当于没走。

因此一定存在一种方案,使得里面的环都不相交。

把不需要改变状态的边都去掉,剩下的图若存在奇点则无解。

否则,每找到一个环就将环上的边都删掉,时间复杂度$O(n+m)$。

#include<cstdio>
const int N=2000010,BUF=20000000;
int n,_m,m,i,j,k,x,y,d[N],s[N],e[N][3],a[N],v[N],q[N],t;
int cnt,now,tmp[N],ans[N],pos;
char Buf[BUF],*buf=Buf;
inline void read(int&a){for(a=0;*buf<48;buf++);while(*buf>47)a=a*10+*buf++-48;}
void write(int x){if(x>9)write(x/10);putchar(x%10+48);}
int main(){
for(fread(Buf,1,BUF,stdin),read(n),read(_m);_m--;){
read(i),read(j),read(x),read(y);
if(x^y)d[e[++m][0]=i]++,d[e[m][1]=j]++;
}
for(i=1;i<=n;i++)if(d[i]&1)return puts("NIE"),0;
for(i=1;i<=n;i++)s[i+1]=s[i]+d[i],d[i]=0;
for(i=1;i<=m;a[s[x]+d[x]]=a[s[y]+d[y]]=i++)d[x=e[i][0]]++,d[y=e[i][1]]++;
for(i=1;i<=n;i++)for(q[t=1]=x=i;x;x=y){
for(v[x]=1,y=0;d[x];d[x]--)if(!e[j=a[s[x]+d[x]]][2]){
e[j][2]=1;
if(v[k=e[j][x==e[j][0]]]){
for(cnt++,now=0,y=k;q[t]!=k;v[q[t--]]=0)tmp[++now]=q[t];
for(tmp[++now]=k,ans[++pos]=now,k=1;k<=now;k++)ans[++pos]=tmp[k];
ans[++pos]=tmp[1];
}else y=q[++t]=k;
break;
}
if(!y&&t)y=q[t--];
}
for(write(cnt),putchar(10),i=1;i<=pos;i=j+1){
write(ans[i]),putchar(32);
for(j=i+1;j<=i+ans[i];j++)write(ans[j]),putchar(32);
write(ans[j]),putchar(10);
}
return 0;
}

  

BZOJ2278 : [Poi2011]Garbage的更多相关文章

  1. BZOJ2278 [Poi2011]Garbage[欧拉回路求环]

    首先研究环上性质,发现如果状态不变的边就不需要动了,每次改的环上边肯定都是起末状态不同的边且仅改一次,因为如果有一条边在多个环上,相当于没有改,无视这条边之后,这几个环显然可以并成一个大环.所以,我们 ...

  2. [POI2011]Garbage 欧拉回路

    [POI2011]Garbage 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2278 https://loj.ac/problem/216 ...

  3. POI2011题解

    POI2011题解 2214先咕一会... [BZOJ2212][POI2011]Tree Rotations 线段树合并模板题. #include<cstdio> #include< ...

  4. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  5. POI做题笔记

    POI2011 Conspiracy (2-SAT) Description \(n\leq 5000\) Solution 发现可拆点然后使用2-SAT做,由于特殊的关系,可以证明每次只能交换两个集 ...

  6. 【LOJ#2162】【POI2011】Garbage(欧拉回路)

    [LOJ#2162][POI2011]Garbage(欧拉回路) 题面 LOJ 题解 首先有一个比较显然的结论,对于不需要修改颜色的边可以直接删掉,对于需要修改的边保留.说白点就是每条边要被访问的次数 ...

  7. [LOJ #2162]「POI2011」Garbage

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

  8. Unity性能优化(3)-官方教程Optimizing garbage collection in Unity games翻译

    本文是Unity官方教程,性能优化系列的第三篇<Optimizing garbage collection in Unity games>的翻译. 相关文章: Unity性能优化(1)-官 ...

  9. BZOJ2527: [Poi2011]Meteors

    补一发题解.. 整体二分这个东西,一开始感觉复杂度不是很靠谱的样子 问了po姐姐,说套主定理硬干.. #include<bits/stdc++.h> #define ll long lon ...

随机推荐

  1. SQL记录-PLSQL字符串

    PL/SQL字符串 PL/SQL字符串实际上是一个可选的尺寸规格字符序列.字符可以是数字,字母,空白,特殊字符或全部的组合. PL/SQL提供了三种类型的字符串: 固定长度字符串:在这样的字符串,程序 ...

  2. 禁止表单操作及JS控制输入的方式

    <div>表单元素特殊属性<input type="text" value="禁止输入" disabled /></div> ...

  3. 第10月第28天 touchesBegan hittest

    1. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [[self nextResponder] touchesBe ...

  4. 20165230 《Java程序设计》实验五《网络编程与安全》实验报告

    20165230 <Java程序设计>实验五<网络编程与安全>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: ...

  5. oracle 建用户

    create user username identified by password; grant dba to username; 注意当对用户赋予resource角色时将同时赋予unlimite ...

  6. jenkins+jmeter结合使用

    事件背景:想实现jmeter每30分钟执行一次,但是夜里不能人工操作,结果度娘,汇总结果如下 1.配置jmeter测试环境,注意修改Jmeter的bin目录下jmeter.properties文件的配 ...

  7. jexus http to https

    一.摘要 1.80端口上只要没有网站使用 hosts=* 这样的配置,jexus会自动将域名跳转到 https 上.也就是说,你把网站默认配置文件default中的hosts=*改成具体的其它的域名, ...

  8. 和为k的最长子数组及其延伸

    问题1: /** * 问题描述: * 给定一个无序数组arr,其中元素可正.可负.可0, * 求arr所有的子数组中正数与负数个数相等的最长子数组长度 * * 解题思路:对数组进行处理,正数为1,负数 ...

  9. MyEclipse如何查找指定工程下所有或指定文件中特定字符串并且可进行批量替换

    查找操作步骤:(1)在myEclipse里菜单选择-Search-Search(快捷键:ctrl+h);(2)在弹出对话框中选File Search选项,然后在第一个文本框中输入“要查找的字符串”(为 ...

  10. 把任意exe程序注册成windows系统服务

    某gae代理软件每次开机都需要手动启动,就算添加成开机启动项,在win8.1下权限的管理更加严格,开机时并不能成功启动软件(无人值守时开机),因此在网上搜索把exe注册成系统服务的办法,找到论坛两个帖 ...