[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)-官 ...
随机推荐
- shader之法线变换
对于法线变换,进行非统一缩放时,如果使用跟变换顶点相同的变换矩阵来变换法线,则会得到错误的结果,即变换后的法线方向与平面不再垂直. 如何求得变换法线的矩阵呢: 转载请注明出处:http://www.c ...
- ubuntu安装mysql,redis,python-mysqldb
sudo apt-get install mysql-server sudo apt-get install redis-server sudo apt-get install python-redi ...
- vs远程调试 转http://www.cnblogs.com/magicchaiy/archive/2013/05/28/3088274.html
远程调试应用场景 部署环境:ASP.NET(C#)+IIS+Win7 64 bit 很多公司的开发模式都是将开发机器和服务器分开,也就是开发一台机,服务器一台机.而测试人员会在服务器上录入测试数据,此 ...
- Yii2 Gridview查询关联筛选
- html5-样式表的使用-初步
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- 【转】SQL Server 运行状况监控SQL语句
SQL Server 运行状况监控SQL语句 Microsoft SQL Server 2005 提供了一些工具来监控数据库.方法之一是动态管理视图.动态管理视图 (DMV) 和动态管理函数 (D ...
- 抓取biqukan
#python3.7 ''' 功能:实现www.biqukan.com/1_1094/5403177.html小说下载为txtv1.0 ''' import requests,sys,time fro ...
- 批量下载网站图片的Python实用小工具(下)
引子 在 批量下载网站图片的Python实用小工具 一文中,讲解了开发一个Python小工具来实现网站图片的并发批量拉取.不过那个工具仅限于特定网站的特定规则,本文将基于其代码实现,开发一个更加通用的 ...
- 孤立森林(Isolation Forest)
前言随着机器学习近年来的流行,尤其是深度学习的火热.机器学习算法在很多领域的应用越来越普遍.最近,我在一家广告公司做广告点击反作弊算法研究工作.想到了异常检测算法,并且上网调研发现有一个算法非常火爆, ...
- SQL小结
1. 一般而言,除非你确实需要表中的每一列,否则最好别使用*通配符.虽然使用通配符让你自己省事,不用明确列出所需列,但检索不需要的列通常会降低检索和应用程序的性能. 2. DISTINCT关键字作用于 ...