首页 > 其他分享 >Coloring Edges

Coloring Edges

时间:2024-02-29 19:57:46浏览次数:31  
标签:Coloring int ins 返祖 Edges ans st id

\(Solution\)

link

一个经典结论是有向图中的任意一个环总能由一条生成树上的从祖先到儿子的链以及一条返祖边组成,正确性显然。

不妨将所有树边和横插边都染成黑色,返祖边染成白色,这样就可以保证任意一个环都有两种颜色了。

判断横插边和返祖边可以用栈来维护。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int N = 5e3 + 5;

int n, m;
vector<PII> e[N];
int ans[N];
bool st[N], ins[N];

void dfs(int u) {
	st[u] = true;
	ins[u] = true;
	for (auto [v, id] : e[u]) {
		if (!st[v]) {
			ans[id] = 1;
			dfs(v);
		}
		else {
			if (ins[v]) ans[id] = 2;
			else ans[id] = 1;
		}
	}
	ins[u] = false;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);

    cin >> n >> m;
    for (int i = 1; i <= m; i ++) {
    	int u, v;
    	cin >> u >> v;
    	e[u].emplace_back(v, i);
    }
    for (int i = 1; i <= n; i ++) {
    	if (!st[i]) {
    		dfs(i);
    	}
    }
    cout << *max_element(ans + 1, ans + 1 + m) << '\n';
    for (int i = 1; i <= m; i ++) {
    	cout << ans[i] << ' ';
    }
    return 0;
}

标签:Coloring,int,ins,返祖,Edges,ans,st,id
From: https://www.cnblogs.com/Svemit/p/18045311

相关文章

  • CF111D Petya and Coloring 题解
    很明显这是一道组合题。首先特判一下,当\(m=1\)时,答案就是\(k^n\)。对于\(m>1\)的情况,我们可以得出一个结论:对于沿格子的线穿过的任何垂直线,会将棋盘分成两个非空的部分,这两个部分中的不同颜色的数量相同且总是不变。设这个不同颜色的数量为\(i\),那么左边这部分的颜色一定......
  • 题解 CF1781G Diverse Coloring
    \(\texttt{link}\)题意给定一棵\(n\)个点的二叉树,现对其每个点染成黑色或白色。一种合法的染色方案满足:对于所有黑色的点,都存在白色的点与之相邻。对于所有白色的点,都存在黑色的点与之相邻。一种染色方案的权值是染成黑色的点数与染成白色的点数之差的绝对值。\(\foral......
  • 2024-02-24:用go语言,给你一个 n 个点的带权无向连通图,节点编号为 0 到 n-1, 同时还有一
    2024-02-24:用go语言,给你一个n个点的带权无向连通图,节点编号为0到n-1,同时还有一个数组edges,其中edges[i]=[fromi,toi,weighti],表示在fromi和toi节点之间有一条带权无向边,最小生成树(MST)是给定图中边的一个子集,它连接了所有节点且没有环,而且这些边的权值和最......
  • Codeforces Round 734 (Div. 3)B2. Wonderful Coloring - 2(贪心构造实现)
    思路:分类讨论:当一个数字出现的次数大于等于k,那么最多有k个能被染色,当一个数字出现的次数小于k,南那么这些数字都可能被染色还有一个条件就是需要满足每个颜色的数字个数一样多,这里记出现次数小于k的所有数字的出现次数总和为sum,将所有这些数字排序后,前sum-sum%k个数字是都可以......
  • EdgeSAM革新:iPhone上的实时SAM,速度提升40倍!
    引言近日,洋理工大学与上海AILab合作研发的EdgeSAM在移动端图像分割领域取得了重大突破。这一优化版SegmentAnythingModel(SAM)变体在iPhone14上的运行速度达到了惊人的38FPS,相比原始SAM快了40倍,为移动设备上的实时交互式图像分割开辟了新天地。Github:https://github.com/chongz......
  • [Codeforces] CF1774B Coloring
    CF1774BColoring题意Cirno_9baka的纸条上有\(n\)个格子,他觉得空白的纸条看着有点无趣,于是想在纸条的格子上涂上\(m\)种颜色。同时,他认为第\(i\)种颜色必须要用\(a_i\)次,且每连续\(k\)个格子里涂的颜色必须互不相同。Cirno_9baka想知道有没有这样的一种涂色方案能......
  • 题解 CF1887E【Good Colorings】
    萌萌交互题。对网格图进行二分图建模,左部\(n\)个点表示每一行,右部\(n\)个点表示每一列。若格子\((i,j)\)被染成\(c\)色,就连接\((L_i,R_j,c)\)的边。由抽屉原理易证,在初始局面中至少有一个各边颜色均不同的偶环。获胜条件相当于存在一个各边颜色均不同的四元环。讨论......
  • CF1592F2 Alice and Recoloring 2
    题意给定一个矩阵,有两种颜色\(W\)和\(B\)。你可以花\(1\)的代价反转一个包含\((1,1)\)的矩阵。你可以花\(3\)的代价反转一个包含\((n,1)\)的矩阵。你可以花\(4\)的代价反转一个包含\((1,m)\)的矩阵。你可以花\(2\)的代价反转一个包含\((n,m)\)的矩阵......
  • [CF1592F2] Alice and Recoloring 2
    题目链接操作2和3可以用另两个代替,没有任何用。设W表示\(t_{i,j}=0\),B表示\(t_{i,j}=1\)考虑差分。设\(t_{i,j}=s_{i,j}\opluss_{i+1,j}\opluss_{i,j+1}\opluss_{i+1,j+1}\),那么目标变为把$t4数组清0那么操作1是把单点翻转,操作4是对于一个\(x,y(x<n,y<m)......
  • [AGC052B] Tree Edges XOR 题解
    题目链接点击打开链接题目解法怎么感觉这场\(B\)比\(C\)思维量更大考虑一步很妙的操作:把边权变成点权,以达到简化操作的目的使每条边的边权为两端点的异或和,手画一下可以发现,操作简化成了交换两端点的点权我们定义\(d_{1/2,i}\)定义为在\(1/2\)树上,\(i\)到根的权值......