题面

想必各位大佬一定想到了把现在和目标值不一致的边加入到一个新建的图上;

问题就变为了在新的图上寻找有多少个欧拉回路,并输出这些路径;

我们可以用栈来记录情况,然后对于会回答稍微处理处理就好了;

#include <bits/stdc++.h>
#define inc(i,a,b) for(register int i=a;i<=b;i++)
using namespace std;
struct littlestar{
int to;
int nxt;
}star[2500010];
int head[2500010],cnt=1;
void add(int u,int v)
{
star[++cnt].to=v;
star[cnt].nxt=head[u];
head[u]=cnt;
}
int n,m;
int du[2500010];
int st[2500010],top;
int vis[2500010];
int ans;
void dfs(int u,int goal)
{
st[++top]=u;
du[u]--;
du[u]--;
for(int i=head[u];i;i=star[i].nxt){
int v=star[i].to;
head[u]=i;
if(vis[i]) continue;
vis[i]=vis[i^1]=1;
if(u!=goal&&v==goal){
++ans;
st[++top]=v;
return;
}
dfs(v,goal);
return ;
}
}
int main()
{
scanf("%d%d",&n,&m);
inc(i,1,m){
int u,v,w,goal;
scanf("%d%d%d%d",&u,&v,&w,&goal);
if(w==goal) continue;
add(u,v);
add(v,u);
du[u]++;
du[v]++;
}
inc(i,1,n){
if(du[i]&1){
cout<<"NIE"<<endl;
return 0;
}
}
inc(i,1,n){
while(du[i]){
dfs(i,i);
}
}
cout<<ans<<endl;
inc(i,1,top){
int goal=st[i];
++i;
int num=0;
while(st[i]!=goal&&i<=top) ++i,++num;
cout<<num+1<<" ";
inc(j,i-num,i){
printf("%d ",st[j]);
}
printf("%d",st[i-num]);
cout<<endl;
}
}

[POI2011]SMI-Garbage 题解的更多相关文章

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

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

  2. [LOJ #2162]「POI2011」Garbage

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

  3. [POI2011]ROT-Tree Rotations 题解

    题面 这道题咋看都是无法从dp入手,那么就从数据结构入手!: 首先你要会权值线段树和线段树合并. 然后你要知道: 对于任意一个节点,交换左右子树对当前节点和前面的所有节点没有影响. 因为这是前序遍历: ...

  4. POI2011题解

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

  5. [POI2011]Garbage 欧拉回路

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

  6. BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解

    +++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...

  7. BZOJ2278 : [Poi2011]Garbage

    如果两个环相交,那么相交的部分相当于没走. 因此一定存在一种方案,使得里面的环都不相交. 把不需要改变状态的边都去掉,剩下的图若存在奇点则无解. 否则,每找到一个环就将环上的边都删掉,时间复杂度$O( ...

  8. [Poi2011]Meteors 题解

    题目大意: 给定一个环,每个节点有一个所属国家,k次事件,每次对[l,r]区间上的每个点点权加上一个值,求每个国家最早多少次操作之后所有点的点权和能达到一个值. 思路: 整体二分(二分答案),对于每个 ...

  9. 题解 P3521 【[POI2011]ROT-Tree Rotations】

    这道题采用权值线段树合并的解法. 首先讲一下解法中出现的两个概念:权值线段树与线段树合并. 所谓权值线段树,可以理解为维护的信息反过来的普通线段树,我个人认为值域线段树这个名字其实要准确一些. 举个例 ...

  10. 洛谷 P3518 [POI2011] SEJ-Strongbox 题解

    思路: 首先先将每个输入的数据与n的最大公约数求出(因为如果a[i]是密码,那么所有a[i]与n最大公约数的倍数也是密码:于是如果a[i]不是密码,那么所有a[i]与n最大公约数的倍数也都不是密码)再 ...

随机推荐

  1. TTTTTTTTTTTTTTT poj 2932 Coneology 平面扫描+STL

    题目链接 题意:有n个圆,圆之间不存在相交关系,求有几个不被其他任何圆包含的圆,并输出圆的编号: #include <iostream> #include <cstdio> # ...

  2. Linux命令-文件管理(四)

    Linux命令-文件管理 Linux slocate命令 Linux slocate命令查找文件或目录. slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息. 语法 slocate ...

  3. kali修改更新源及更新

    进入源文件进行修改 leafpad /etc/apt/sources.list (其实系统本身就自带了更新源,去掉其注释也是可以的,现在官方源的下载速度也还ok,下面的三选一亦可) #kali官方源 ...

  4. CentOS 6.5上的Tomcat启动报错问题

    最近在搭建虚拟机环境,装的是CentOSQL 6.5版本,然后装的OpenJDK1.7,在Apache下载了一个纯净的Tomcat放到虚拟机上启动报错了: 这里有两个错误: 1.第一个错误,APR的问 ...

  5. Eclipse控制台输出中文乱码问题的解决

    啥都不说,上图: 1.console控制台打印乱码 2.右键: Run As --> Run Configurations 3.找到common项,在“Encoding”栏,看到当前用的是默认“ ...

  6. 胜利点20191010-5 alpha week 1/2 Scrum立会报告+燃尽图 03

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8747 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 杨萍队名:胜 ...

  7. 191107Django的Cookie和Session

    Cookie的使用 from django.shortcuts import render,redirect def login(request): print("1",reque ...

  8. div随窗口变化设置高度

    window.onscroll = function () { sc(); }; window.onresize = function () { sc(); }; window.onload = fu ...

  9. laravel 发送html邮件是a标签中的url不显示问题

  10. ftp反向代理配置

    说明:源ftp在内网,访问在另一个内网,要求用户对真实ftp地址透明,且免密访问. 1.将ftp配置为被动模式,指定被动访问端口映射出来. // vsftp配置被动模式,列出主要配置 connect_ ...