求调
查看原帖
求调
482610
Mortidesperatslav楼主2024/3/1 21:08
#include<bits/stdc++.h>
using namespace std;
int ig[114514], dfn[114514], low[114514], col[114514], vl[114514];
int n, m, a1, a2, cnt, ign, ans;
bool vis[114514];
vector<int> G[114514], NG[114514], iNG[114514];
stack<int> s;
queue<int> q;
int dis[2][114514];
void tarjan(int u){
	dfn[u] = low[u] = ++cnt;
	s.push(u);
	vis[u] = 1;
	for (auto &v : G[u]){
		if (!dfn[v]){
			tarjan(v);
			low[u] = min(low[u], low[v]);
		}else if (vis[v])
			low[u] = min(low[u], dfn[v]);
	}
	if (dfn[u] == low[u]){
		while (!s.empty()){
			int v = s.top();
			s.pop();
			vis[v] = 0;
			col[v] = u;
			vl[u]++;
			if (u == v)
				break;
		}
	}
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= m; i++){
		int u, v;
		cin >> u >> v;
		G[u].push_back(v);
	}
	for (int i = 1; i <= n; i++)
		if (!dfn[i])
			tarjan(i);
	for (int i = 1; i <= n; i++)
		for (auto v : G[i]){
			if (col[i] == col[v])
				continue;
			NG[col[i]].push_back(col[v]);
			ig[col[i]] = ig[col[v]] = 1;
			iNG[col[v]].push_back(col[i]);
			cout << col[v] << " <- " << col[i] << "\n";
		}
	for (int i = 1; i <= n; i++)
		if (col[i] == i && !ig[i])
			ig[i] = 1;
	for (int i = 1; i <= n; i++)
		if (ig[i])
			ign++;
	int s = col[1];
	q.push(s);
	dis[0][s] = vl[s];
	while (!q.empty()){
		int u = q.front();
		q.pop();
		for (auto v : NG[u]){
			cout << u <<  " -> " << v << "\n";
			if (dis[0][v] == -1 || dis[0][v] < dis[0][u] + vl[v]){
				dis[0][v] = dis[0][u] + vl[v];
				cout << v << "\n";
				q.push(v);
			}
		}
	}
	dis[1][s] = vl[s];
	while (!q.empty()){
		int u = q.front();
		q.pop();
		for (auto v : iNG[u]){
			if (dis[1][v] == -1 || dis[1][v] < dis[1][u] + vl[v]){
				dis[1][v] = dis[1][u] + vl[v];
				q.push(v);
			}
		}
	}
	ans = vl[s];
	for (int u = 1; u <= n; u++)
		cout << dis[0][u] << " " << dis[1][u] << "\n"; 
	for (int u = 1; u <= n; u++)
		for (auto v : iNG[u])
			ans = max(ans, dis[1][u] + dis[0][v] - vl[col[1]]);
	cout << ans;
}

有一些调试信息。

按照第一篇题解的思路写的。

2024/3/1 21:08
加载中...