[POI2011]Garbage 欧拉回路
[POI2011]Garbage
链接
https://www.lydsy.com/JudgeOnline/problem.php?id=2278
https://loj.ac/problem/2162
https://www.luogu.org/problemnew/show/P3520
思路
求欧拉回路
求不到就GG
不过好像复杂度不对,一直TLE
luogu90TLE
loj85TLE
bzojwrong
不过本地只跑1e7,std跑2e7
代码
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int N=1e5+7,M=1e6+7;
char buf[20000001],*p1=buf,*p2=buf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,20000000,stdin),p1==p2)?EOF:*p1++)
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
int out_tp,out_stk[25];
void opt(int x){
if (!x){ putchar('0'); return; }
int t; for (; x; x=t){ t=x/10; out_stk[++out_tp]=x-t*10; }
while (out_tp) putchar(out_stk[out_tp--]+'0');
putchar(' ');
}
int n,m;
struct node {
int v,nxt,q,ok;
}e[M<<1];
int head[N],tot=1;
vector<int> ans[N];
void add(int u,int v,int q) {
e[++tot].v=v;
e[tot].q=q;
e[tot].nxt=head[u];
head[u]=tot;
}
int stak[M],top,js;
bool dfs(int u,int f,int T) {
if(u==T&&f) return true;
for(int i=head[u];i;i=e[i].nxt) {
int v=e[i].v;
if(e[i].ok||!e[i].q) continue;
e[i].q=e[i^1].q=0;
stak[++top]=i;
if(dfs(v,u,T)) return true;
while(stak[top]!=i) {
e[stak[top]^1].ok=e[stak[top]].q=1;
e[stak[top]^1].q=e[stak[top--]].q=1;
}
e[i].ok=e[i^1].ok=1;
e[stak[top]^1].q=e[stak[top--]].q=1;
}
return false;
}
int main() {
// freopen("smi10a.in","r",stdin);
n=read(),m=read();
for(int i=1;i<=m;++i) {
int u=read(),v=read();
int x=read(),y=read();
add(u,v,x^y),add(v,u,x^y);
}
for(int i=1;i<=n;++i) {
int flag=0;
for(int j=head[i];j;j=e[j].nxt) if(e[j].q) flag=1;
if(flag) {
if(!dfs(i,0,i)) {
puts("NIE");
return 0;
}
++js;
while(top) ans[js].push_back(e[stak[top--]].v);
ans[js].push_back(i);
}
}
printf("%d\n",js);
for(int i=1;i<=js;++i) {
opt(ans[i].size()-1);
for(int j=0;j<ans[i].size();++j)
opt(ans[i][j]);
printf("\n");
}
return 0;
}
[POI2011]Garbage 欧拉回路的更多相关文章
- BZOJ2278 [Poi2011]Garbage[欧拉回路求环]
首先研究环上性质,发现如果状态不变的边就不需要动了,每次改的环上边肯定都是起末状态不同的边且仅改一次,因为如果有一条边在多个环上,相当于没有改,无视这条边之后,这几个环显然可以并成一个大环.所以,我们 ...
- BZOJ2278 : [Poi2011]Garbage
如果两个环相交,那么相交的部分相当于没走. 因此一定存在一种方案,使得里面的环都不相交. 把不需要改变状态的边都去掉,剩下的图若存在奇点则无解. 否则,每找到一个环就将环上的边都删掉,时间复杂度$O( ...
- POI2011题解
POI2011题解 2214先咕一会... [BZOJ2212][POI2011]Tree Rotations 线段树合并模板题. #include<cstdio> #include< ...
- POI做题笔记
POI2011 Conspiracy (2-SAT) Description \(n\leq 5000\) Solution 发现可拆点然后使用2-SAT做,由于特殊的关系,可以证明每次只能交换两个集 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 【LOJ#2162】【POI2011】Garbage(欧拉回路)
[LOJ#2162][POI2011]Garbage(欧拉回路) 题面 LOJ 题解 首先有一个比较显然的结论,对于不需要修改颜色的边可以直接删掉,对于需要修改的边保留.说白点就是每条边要被访问的次数 ...
- [LOJ #2162]「POI2011」Garbage
题目大意:给一张$n$个点$m$条边的无向图,每条边是黑色的或白色的,要求变成一个目标颜色.可以从任意一个点开始,走一个简单环,回到开始的点,所经过的边颜色翻转.可以走无数次.问是否有一个方案完成目标 ...
- [POI2011]SMI-Garbage
题目描述 http://main.edu.pl/en/archive/oi/18/smi The Byteotian Waste Management Company (BWMC) has drast ...
- Unity性能优化(3)-官方教程Optimizing garbage collection in Unity games翻译
本文是Unity官方教程,性能优化系列的第三篇<Optimizing garbage collection in Unity games>的翻译. 相关文章: Unity性能优化(1)-官 ...
随机推荐
- 如何删除WINDOWS中服务中不再使用的服务?
右键选择那个不需要的服务,点击属性,看到"服务名",拷贝下来 然后通过管理员的方式进入到控制台,输入 sc delete "你刚才拷贝的服务名" ,就行了,注意 ...
- 1.sklearn库的安装
sklearn库 sklearn是scikit-learn的简称,是一个基于Python的第三方模块.sklearn库集成了一些常用的机器学习方法,在进行机器学习任务时,并不需要实现算法,只需要简单的 ...
- hdu5064 DLX可重复覆盖+二分
这题题意是 给了n个城市 在其中小于等于k个城市建立机场然后 使得最远的那个离机场的城市距离最短 二分答案 ,我们对于每次的mid 重新建图然后再来一次DLX,每个点可以覆盖的点建立一条联系就ok了 ...
- jQuery工具--jQuery.isNumeric(value)和jQuery.trim(str)
jQuery.isNumeric(value) 概述 确定它的参数是否是一个数字. $.isNumeric() 方法检查它的参数是否代表一个数值.如果是这样,它返回 true.否则,它返回false. ...
- ReactiveCocoa(I)
ReactiveCocoa常见类 1. RAC中最核心的类RACSiganl: RACSiganl:信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据,就会马上发出数据 解析: 信号类 ...
- git克隆远程项目并创建本地对应分支
http://jingyan.baidu.com/article/19192ad83ea879e53e5707ce.html
- Java WEB 笔记
1. 部署并启动 tomcat 服务器 1). 解压 apache-tomcat-version 到一个非中文目录下 2). 配置一个环境变量,JAVA_HOME(指向 JDK 安装目录)或 JRE_ ...
- 新服务器上装java PHP环境有什么一键安装的方便的方法?一般都是怎么安装环境的?
新服务器上装java PHP环境有什么一键安装的方便的方法?一般都是怎么安装环境的? linode digitalocean都有很好的教程,下面是ubuntu和centos的两个教程连接. How ...
- 开始Nginx的SSL模块
nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/n ...
- bzoj3196 二逼平衡树
题目链接 平衡树系列最后一题 坑啊 10s时间限制跑了9764ms...还是要学一学bit套主席树啦... 经典的线段树套treap...至于第一发为什么要TLE(我不会告诉你treap插入的时候忘了 ...