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

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

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

否则,每找到一个环就将环上的边都删掉,时间复杂度$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. python---django中STATIC_ROOT和STATIC_URL以及STATICFILES_DIRS

    先引入两篇相关文章,从中了解更为详细 django 静态资源配置详解 django静态文件配置 Django的STATIC_ROOT和STATIC_URL以及STATICFILES_DIRS(先看) ...

  2. 贪心算法:Codevs 1044 拦截导弹

    ---恢复内容开始--- #include <iostream> #include <cstdio> #include <cstdlib> #include < ...

  3. [转载]详解主流浏览器多进程架构:Chrome、IE

    http://www.cnbeta.com/articles/109595.htm 随着Web浏览器重要性的日益突出,恶意软件.木马.间谍软件等网络攻击也呈现逐渐的上升.而面对 如此众多的潜在威胁,为 ...

  4. Flex 界面初始化 自定义 预加载 类!

    说明: 自定义界面初始化过程提示:初始化...,初始化完毕,加载完毕! ZPreloader.as package com.command { import flash.display.Graphic ...

  5. HDU 2680 Choose the best route 最短路问题

    题目描述:Kiki想去他的一个朋友家,他的朋友家包括所有的公交站点一共有n 个,一共有m条线路,线路都是单向的,然后Kiki可以在他附近的几个公交站乘车,求最短的路径长度是多少. 解题报告:这道题的特 ...

  6. 叉积(POJ - 2318 )

    题目链接:https://cn.vjudge.net/contest/276358#problem/A 题目大意:给你一个矩阵的左上角和右下角,然后n个竖杠,这n个竖杠将这个矩阵分成n+1个方块,给你 ...

  7. C#使用redis学习笔记

    1.官网:http://redis.io/(英)  http://www.redis.cn/(中) 2.下载:https://github.com/dmajkic/redis/downloads(Wi ...

  8. Java中获取包含变量的配置文件config.properties内容

    应用场景 有些时候项目中会用到很多路径,并且很可能多个路径在同一个根目录下,那为了方便配置的修改,达到只修改根目录即可达到一改全改的效果,此时就会想到要是有变量就好了: 另外有时候路径中的文件名是不确 ...

  9. crontab挂定时任务

    Linux shell基本知识 a)">"  与 ">>"  的作用是不一样的,前者使用本次输出内容替换原有文件的内容,后者则是把本次输出追加 ...

  10. Grafana 短信报警

    一.分析 需求 Grafana支持短信渠道报警 要求 使用开发提供的短信API接口 请求url: http://192.168.1.1:8088/alerting/sendSms?mobile=手机号 ...