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

[LOJ#2162][POI2011]Garbage(欧拉回路) 题面 LOJ 题解 首先有一个比较显然的结论,对于不需要修改颜色的边可以直接删掉,对于需要修改的边保留.说白点就是每条边要被访问的次数可以直接模二.证明的话就是如果一条边被经过了两次,证明其连通了两侧的两个块,那么把这两次删掉,可以把两侧各拆分成一个欧拉回路,不会影响答案. 于是剩下的边直接对于每一个连通块算欧拉回路. 然后对于强制定向之后的图直接\(dfs\)找到所有简单环就可以了. #include<iostream> #i…
题目大意:给一张$n$个点$m$条边的无向图,每条边是黑色的或白色的,要求变成一个目标颜色.可以从任意一个点开始,走一个简单环,回到开始的点,所经过的边颜色翻转.可以走无数次.问是否有一个方案完成目标.有则输出任意方案. 题解:不用改变颜色的边不用管,因为可以通过走两个环使得这条边经过两次,而剩下的部分会拼成一个大环. 即要求是找互不相交的环,使得构成整张图 卡点:1.输出格式要求起点输出两次 2.找到环后不可以退出 C++ Code: #include <cstdio> #include &…
题面 这道题咋看都是无法从dp入手,那么就从数据结构入手!: 首先你要会权值线段树和线段树合并. 然后你要知道: 对于任意一个节点,交换左右子树对当前节点和前面的所有节点没有影响. 因为这是前序遍历:根节点->左子树->右子树.可以看到,交换左右子树对前面的节点无影响. 我们清楚,交换子树只会对该逆序对横跨左右子树这种情况产生影响.因此,我们只需要在合并线段树的过程中统计交换子树的逆序对个数ans1和不交换子树的逆序对个数ans1,取 min(ans1,ans2) 累加到答案中就行了. 每一次…
POI2011题解 2214先咕一会... [BZOJ2212][POI2011]Tree Rotations 线段树合并模板题. #include<cstdio> #include<algorithm> using namespace std; int gi(){ int x=0,w=1;char ch=getchar(); while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar(); if (ch=='-') w=0…
[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>…
+++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+ +++++++++++++++++++++++++++++++++++++++++++ https://www.luogu.org/problemnew/show/3527 http://www.lydsy.com/JudgeOnline/problem.php?id=2527…
如果两个环相交,那么相交的部分相当于没走. 因此一定存在一种方案,使得里面的环都不相交. 把不需要改变状态的边都去掉,剩下的图若存在奇点则无解. 否则,每找到一个环就将环上的边都删掉,时间复杂度$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; cha…
题目大意: 给定一个环,每个节点有一个所属国家,k次事件,每次对[l,r]区间上的每个点点权加上一个值,求每个国家最早多少次操作之后所有点的点权和能达到一个值. 思路: 整体二分(二分答案),对于每个国家,如果在m次事件后到达目标则放在左边,否则放在右边(用下标映射).区间加用树状数组维护. 反思: 整体二分不熟练.二分计算时算到mid,now表示当前已经经历了几次事件(可进可退).快速排序用的也是整体二分. 代码: #include<cstdio> #define ll long long…
这道题采用权值线段树合并的解法. 首先讲一下解法中出现的两个概念:权值线段树与线段树合并. 所谓权值线段树,可以理解为维护的信息反过来的普通线段树,我个人认为值域线段树这个名字其实要准确一些. 举个例子,我们将序列$1,1,2,3,4,4,4,5,6,6$中的数依次插入,那么插入完成之后的效果图大概是下面这样的: (其中红色为节点的值) 也就是说,每一个节点维护的值是这个区间内的数出现的次数. 在实现权值线段树时,我们通常会采用动态开点的方式,也就是不创建无关的节点,当然也可以离散化数据,否则必…
思路: 首先先将每个输入的数据与n的最大公约数求出(因为如果a[i]是密码,那么所有a[i]与n最大公约数的倍数也是密码:于是如果a[i]不是密码,那么所有a[i]与n最大公约数的倍数也都不是密码)再从1到sqrt(a[k])(其实1到a[k]也行)找,最小且符合条件就是最小密码. #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<cma…