自己测了一下好像是tarjan有点问题 参考的标程参考最下面的链接
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = 1e5 + 5;
int n , m , a , b , w;
int cmp[maxn] , dfn[maxn] , low[maxn] , in_stack[maxn];
int cnt[maxn] , dp[maxn] , in[maxn];
int timer , id;
stack<int>s;
struct edge {
int b , w;
edge(int B , int W) { b = B , w = W; }
};
vector<edge>G[maxn] , son[maxn];
void tarjan(int a) {
low[a] = dfn[a] = ++timer;
in_stack[a] = 1;
s.push(a);
int len = G[a].size();
for (int i = 0;i < len;i++) {
b = G[a][i].b;
if (!dfn[b]) {
tarjan(b);
low[a] = min(low[a] , low[b]);
}
else if (in_stack[b]) {
low[a] = min(low[a] , dfn[b]);
}
}
if (dfn[a] == low[a]) {
id++;
while (in_stack[a]) {
in_stack[s.top()] = 0;
cmp[s.top()] = id;
cnt[id]++;
s.pop();
}
}
}
signed main() {
freopen("AAA" , "r" , stdin);
// freopen("A.out" , "w" , stdout);
cin >> n >> m;
for (int i = 1 , op;i <= m;i++) {
cin >> op;
cin >> a >> b;
switch (op) {
case 1:
//a==b
G[a].push_back(edge(b , 0));
G[b].push_back(edge(a , 0));
break;
case 2:
//a-b<0 -> a-b<=-1 -> b>=a+1
G[a].push_back(edge(b , 1));
break;
case 3:
//a-b>=0 -> a>=b
G[b].push_back(edge(a , 0));
break;
case 4:
//a-b>0 -> a-b>=1 -> a>=b+1
G[b].push_back(edge(a , 1));
break;
case 5:
//a-b<=0 -> b>=a
G[a].push_back(edge(b , 0));
break;
}
}
for (int i = 1;i <= n;i++) {
if (!dfn[i]) tarjan(i);
}
// cout << id << endl;
// for (int i = 1;i <= n;i++)cout << cmp[i] << endl;
for (a = 1;a <= n;a++) {
for (edge e : G[a]) {
b = e.b , w = e.w;
if (cmp[a] == cmp[b] && w == 1) {
// cout << -1 << endl;
// return 0;
}
if (cmp[a] != cmp[b]) {
son[cmp[a]].push_back(edge(cmp[b] , w));
in[cmp[b]]++;
}
}
}
queue<int>q;
for (int i = 1;i <= id;i++) {
if (!in[i])q.push(i) , dp[i] = 1;
}
while (q.size()) {
a = q.front();
q.pop();
for (edge e : son[a]) {
b = e.b , w = e.w;
in[b]--;
dp[b] = max(dp[b] , dp[a] + w);
if (!in[b])q.push(b);
}
}
int ans = 0;
// for (int i = 1;i <= id;i++)cout << dp[i] << endl;
for (int i = 1;i <= id;i++) {
ans += dp[i] * cnt[i];
}
cout << ans << endl;
return 0;
}
//https://blog.csdn.net/weixin_51307520/article/details/126458706