LINK:Painting Graphs with AtCoDeer 看英文题面果然有点吃不消 一些细节会被忽略掉. 问每条边都要被染色 且一个环上边的颜色可以旋转. 用c种颜色有多少本质不同的方法. 注意这里的环指简单环 即不能经过一个节点两次. 考虑环套环的情况 手玩可以发现 可以将这种情况出现的所有边按顺序放置. 那么只和颜色出现的次数有关 隔板法做即可. 一个环 容易发现可以使用\(burnside\)引理. 割边 也很容易. 难点是求简单环. 不能求割边 因为边双不一定是简单环. 但是…
似乎好久都没写博客了....赶快来补一篇 题意 给你一个 \(n\) 个点 , 没有重边和自环的图 . 有 \(m\) 条边 , 每条边可以染 \(1 \to k\) 中的一种颜色 . 对于任意一个简单环 , 可以将它的边的颜色进行旋转任意位 . 询问本质不同的染色方案数个数 . 数据范围 \(1\le n \le 50, 1 \le m \le 100,1 \le k \le 100\\\) 题解 将边 (或者说是很多条边) 分为 \(3\) 种类型 : 不属于任何一个简单环 , 它的贡献为…
[Arc062] Painting Graphs with AtCoDeer Description 给定一张N点M边的无向图,每条边要染一个编号在1到K的颜色.你可以对一张染色了的图进行若干次操作,每次操作形如,在图中选择一个简单环(即不经过相同点的环),并且将其颜色逆时针旋转一个单位.形式的说,假设你选择的环上的边按顺序依次是e1, e2, ... ,ek,那么经过一次操作后ei mod n+1的颜色会变成操作前ei的颜色.两种染色方案被认为是本质相同的,当且仅当其中一种染色后 的图经过若干…
题目传送门 https://atcoder.jp/contests/arc062/tasks/arc062_d 题解 首先对整张图做 Tarjan 点双. 对于一个点双,如果是由一条边构成的,那么很显然就是 \(K\) 种方案. 如果是由一个单环构成,可以直接使用 Burnside 引理,假设这个环的长度为 \(l\),则这个单环的贡献就是 \(\frac{\sum \limits_{i=0}^{l-1} k^{\gcd(i, l)}}l\). 否则,这个点双就是一个复合环.经过一些手动模拟的尝…
题目分析: 如果一个双连通分量是简单环,那么用polya原理计数循环移位即可. 如果一个双连通分量不是简单环,那么它必然可以两两互换,不信你可以证明一下相邻的可以互换. 如果一条边是桥,那么直接乘以k就行了. 代码: #include<bits/stdc++.h> using namespace std; ; ; int n,m,k; vector <int> g[maxn]; int fa[maxn],arr[maxn],dfn[maxn],bccnum,low[maxn],cl…
题解 考虑一个点双(因为是简单环),如果没有环(两点一线),那么乘上K 如果有一个环,那么用polya定理,每个置换圈有gcd(i,n)个循环节 如果有两个及以上的环,任何一种置换都合法,那么只和每个颜色用了多少个有关,用插板法算组合数就是\(\binom{n + k - 1}{k - 1}\) 代码 #include <iostream> #include <cstdio> #include <vector> #include <algorithm> #i…
题意:一个无向图,用$k$种不同的颜色给每条边染色,问能染出多少种不同的图,如果两张图能通过循环移位环边使得颜色相同,那么这两张图被认为是相同的 数学太差伤不起啊...补了一下Burnside定理的证明,这里写一些类似笔记的东西... 置换$\left(\begin{matrix}1\cdots n\\i_1\cdots i_n\end{matrix}\right)$有合成运算$\circ$,满足结合律,有单位元$\iota$,存在唯一逆元满足$f\circ f^{-1}=\iota$,所有$n…
传送门 一道思维题. 如果没有环那么对答案有k的贡献. 如果恰为一个环,可以用polya求贡献. 如果是一个有多个环重叠的双联通的话,直接转化为组合数问题(可以证明只要每种颜色被选取的次数相同一定可以在进行若干次交换之后变成一样的),相当于选一个值域在[1,k][1,k][1,k]中的单调不下降子序列的个数. 这个跟bzoj4403求法是相同的. 对于序列中的每一个元素的值加上它自己的下标就转化成了单调上升子序列的个数,有(edgecnt+k−1k−1)\binom {edge_{cnt}+k-…
Description 给定一张N点M边的无向图,每条边要染一个编号在1到K的颜色. 你可以对一张染色了的图进行若干次操作,每次操作形如,在图中选择一个简单环(即不经过相同点的环),并且将其颜色逆时针旋转一个单位. 形式的说,假设你选择的环上的边按顺序依次是e1, e2, ... ,ek,那么经过一次操作后ei mod n+1的颜色会变成操作前ei的颜色. 两种染色方案被认为是本质相同的,当且仅当其中一种染色后的图经过若干次操作后可以变成另一种染色后的图. 问有多少本质不同的染色方案,输出对10…
求出点双后缩点,对于点双之间,显然不存在简单环,即每一个简单环一定在一个点双内部,换言之即每一个点双可以独立的考虑,然后将结果相乘 (对于点双之间的边任意染色,即若有$s$条边,还会有$k^{s}$的贡献) 对点双分类讨论(假设其有$n$个节点,$m$条边): 1.$n=2$且$m=1$(也就是两点一边),贡献为$k$ 2.$n=m$(一个环),根据polya定理,贡献即$\frac{\sum_{i=0}^{n-1}k^{\gcd(n,i)}}{n}$ 3.$n<m$,则任意两边的颜色都可以单独…
变量解释: low 指当前节点在同一强连通分量(或环)能回溯到的dfn最小的节点 dfn 指当前节点是第几个被搜到的节点(时间戳) sta 栈 vis 是否在栈中 ans 指强连通分量的数量 top 栈顶 1.求强连通分量 定义:如果两个顶点可以相互通达,则称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.有向图的极大强连通子图,称为强连通分量(strongly connected components). 算法:在有向图中从一点(u…
附上一般讲得不错的博客 https://blog.csdn.net/lw277232240/article/details/73251092 https://www.cnblogs.com/collectionne/p/6847240.html https://blog.csdn.net/zhn_666/article/details/77971619 然后附上模板题:              https://vjudge.net/problem/HihoCoder-1183 裸题,直接要你输…
by   GeneralLiu tarjan 求 割点 割边 无向图  的 割点 割边: 对于无向连通图来说, 如果删除   一个点以及与它相连的边   之后, 使得这个图不连通, 那么该点为割点 : 如果删除 一条边 之后 , 使得这个图不连通, 那么该边为割边 :   tarjan 是基于 dfs树 的算法 所以, dfs树 上的一些 术语有必要知道 一下 so  看我 博客 与 有向图的tarjan算法 非常类似 割边 的 求法 (这个一步就判断出来,先写容易的): 在 dfs树 上 后向…
[算法]数论,二分图最大匹配 [题意]有无限张牌,给定n张面朝上的牌的坐标(N<=100),其它牌面朝下,每次操作可以选定一个>=3的素数p,并翻转连续p张牌,求最少操作次数使所有牌向下. [题解] 1.定义bi,当ai和ai-1的朝向相同时,bi=0,否则bi=1.特别的,a0朝向下. 则问题转化为:给定01序列b[],每次选L(正数)和P(奇素数),翻转bL和bP,求最少操作次数使序列全0. 这么转化的关键在于差分,对于区间翻转,区间内的点bi都不会变化,只有区间左端和区间右端+1变化,将…
LINK:Dark Horse 首先考虑1所在位置. 假设1所在位置在1号点 对于此时剩下的其他点的方案来说. 把1移到另外一个点 对于刚才的所有方案来说 相对位置不变是另外的方案. 可以得到 1在任何位置剩下的方案数都相同 所以不妨设1所在点为1 求出方案乘以n. 考虑怎么求方案 即求出剩下的n-1个区间 且每个区间的最小值都不能是给出的m的值. 直接做需要状压 做不了. 考虑容斥 容易想到答案为\(\sum_{s}(-1)^{|s|}f_s\) 其中\(f_s\)表示集合s一定不合法的方案数…
题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: 为什么加椅子?我们可以在最左边或最右边一直加直到人人都有座位. 首先这道题目抽象成二分图很简单,然后我们可以只要求解出人与座位的最大匹配是多少,总人数减去即可,但跑二分图最大匹配显然会超时,我们就可以往霍尔定理方面想. 然后你还需要知道一个霍尔定理推论:假设某个人的集合为\(X\),这个集合所对应的…
今天几道是模板题: 第一道:(粘不了链接呜呜呜) 题目描述 n个城市之间有通讯网络,每个城市都有通讯交换机,直接或间接与其它城市连接.因电子设备容易损坏,需给通讯点配备备用交换机. 但备用 交换机数量有限,不能全部配备,只能给部分重要城市配置. 于是规定:如果某个城市由于交换机损坏,不仅本城市通讯中断,还造成其它城市通讯中断,则配备备 用交换机. 请你根据城市线路情况,计算需配备备用交换机的城市个数,及需配备备用交换机城市的编号. 友情提示:图论常见的坑点,重边,自环,还有对本题来说的不连通 输…
Tarjan求强连通分量 在一个有向图中,如果某两点间都有互相到达的路径,那么称中两个点强联通,如果任意两点都强联通,那么称这个图为强联通图:一个有向图的极大强联通子图称为强联通分量.   算法可以在 的时间内求出一个图的所有强联通分量. 表示进入结点 的时间 表示从 所能追溯到的栈中点的最早时间 如果某个点 已经在栈中则更新  否则对 进行回溯,并在回溯后更新  #include<iostream> #include<cstdlib> #include<cstdio>…
tarjan算法是在dfs生成一颗dfs树的时候按照访问顺序的先后,为每个结点分配一个时间戳,然后再用low[u]表示结点能访问到的最小时间戳 以上的各种应用都是在此拓展而来的. 割点:如果一个图去掉某个点,使得图的连通分支数增加,那么这个点就是割点 某个点是割点,当且仅当这个点的后代没有连回自己祖先的边.即low[v] >= dfn[u]     , v是u的后代 需要注意的是根结点的特判,因为根结点没有祖先,根结点是割点,当且仅当根结点有两个以上的儿子. 问题:重边对该算法有影响吗?没有影响…
概要: 各种dfs时间戳..全是tarjan(或加上他的小伙伴)无限膜拜tarjan orzzzzzzzzz 技巧及注意: 强连通分量是有向图,双连通分量是无向图. 强连通分量找环时的决策和双连通的决策十分相似,但不完全相同. 强连通分量在if(FF[v])后边的else if还要特判是否在栈里,即vis[v],然后才更新LL[u] 割点和双连通分量因为是无向图所以要判个fa,可以在dfs时维护个fa参数 割点如果要求分割的分量,那么就是这个节点对他的子树是割点的数目+1. 割点不需要栈维护但是…
这个文章的思路是按照这里来的.这里讨论的都是无向图.应该有向图也差不多. 1.如何求割点 首先来看求割点.割点必须满足去掉其以后,图被分割.tarjan算法考虑了两个: 根节点如果有两颗及以上子树,它就是割点.因为它没有父亲了(可怜的点). 对于有父亲的普通的结点a,如果它递归树的子树中,有任意节点b的low[b]>=dfn[a],那么它就是割点,反之则不是割点. 如果\(low[b]>=dfn[a]\),a一定是割点.因为\(low[b]>=dfn[a]\)说明有在b这个子树中,里面所…
// https://www.cnblogs.com/stxy-ferryman/p/7779347.html ; struct EDGE { int to, nt; }e[N*N]; int head[N], tot; void addE(int u,int v) { e[tot].to=v; e[tot].nt=head[u]; head[u]=tot++; } int dfn[N], low[N], ind; int col[N], id; bool vis[N]; stack <int>…
目录 Tarjan算法与无向图的连通性 1:基础概念 2:Tarjan判断割点 3:Tarjan判断割边 Tarjan算法与无向图的连通性 1:基础概念 在说Tarjan算法求解无向图的连通性之前,先来说几个概念: <1. 时间戳:在图的深度优先遍历中,按照每一个结点第一次被访问到的时间顺序,依次给予N个结点1~N的整数边集,该标记就被计位"时间戳",计做 \(dfn[x]\). <2. 搜索树:任选一个结点深度优先遍历,每个点只访问一次.产生递归的边构成的树为搜索树. &…
#include <algorithm> #include <cstring> #include <cstdio> using namespace std; +); int n,m,u,v; int head[N],sumedge; struct Edge { int to,next; Edge(,) : to(to),next(next){} }edge[N<<]; void ins(int from,int to) { edge[++sumedge]=E…
一句话题解 因为上篇AGC的写的有点长……估计这篇也短不了所以放个一句话题解方便查阅啥的吧QwQ 具体的题意代码题解还是往下翻…… ARC 058 D:简单容斥计数. E:用二进制表示放的数字,然后状压$DP$. F:$biset$优化$DP$预处理,乱搞贪心. ARC 059 D:傻题,存在长的合法子串就一定会存在短的. E:前缀和优化$DP$. F:每个长度为$len$的串出现的概率是相同的,求到长度为$len$的方案数然后除$2^{len}$. ARC 060 D:对$b$分大于根号和小于…
私のZJOI Day2 2017-3-22 08:00:07 AtCoder试题选讲 SYC(Sun Yican) from Shaoxing No.1 High School 2017-3-22 08:00:07 AtCoder简介自己看. 1.寿司 有一个长为N数列A,初始全为0. 有Q次操作,每次操作两个参数X,Y 在A[1],A[2]-A[X]中找出最小的数,如果有多个找小标最小的,设找到了u A[u] = A[u] + 1 重复这个过程Y次 Solution: A[i] >= A[i…
ARC062 C - AtCoDeerくんと選挙速報 / AtCoDeer and Election Report 每次看看比率至少变成多少倍能大于当前的数 然后就把两个人的票都改成那个数 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space putcha…
Choosing Points 数学 Integers on a Tree 构造 Leftmost Ball 计数dp+组合数学 Painting Graphs with AtCoDeer tarjan+polya Building Cubes with AtCoDeer 枚举 AtCoDeer and Election Report 贪心 Snuke's Coloring 思维题 Snuke's Coloring 2 线段树+单调栈 Make Them Even 贪心 1D Reversi 模…
1478: Sgu282 Isomorphism Description 给 定一个N 个结点的无向完全图( 任意两个结点之间有一条边), 现在你可以用 M 种颜色对这个图的每条边进行染色,每条边必须染一种颜色. 若两个已染色的图,其中一个图可以通过结点重新编号而与另一个图完全相同, 就称这两个染色方案相同. 现在问你有多少种本质不同的染色方法,输出结果 mod P.P 是一个大于N 的质数. Input 仅一行包含三个数,N.M.P. Output 仅一行,为染色方法数 mod P 的结果.…
Link: ARC 062 传送门 C: 每次判断增加a/b哪个合法即可 并不用判断两个都合法时哪个更优,因为此时两者答案必定相同 #include <bits/stdc++.h> using namespace std; typedef long long ll; ll n,a,b,x,y; int main() { scanf("%lld%lld%lld",&n,&a,&b); ;i<=n-;i++) { scanf("%lld%…