@[_Revenge_](/user/750803) 你食不食油饼,拓扑不会?
你就觉的入读只会为1,你是不是以为只有环,你没有寄吧吧,你TM想清楚再发帖好不好,wyy,jbl
by _Revenge_ @ 2023-01-08 22:14:30
@[_Revenge_](/user/750803) 拓扑求浇浇![](//图.tk/q)
by _Revenge_ @ 2023-01-08 22:15:05
@[_Revenge_](/user/750803) 给我爪巴,写好发给你!![](//图.tk/f)
by _Revenge_ @ 2023-01-08 22:15:40
@[_Revenge_](/user/750803) 说 @[_Shu](/user/556013) 是不是AKIOI,说对了我给你
by _Revenge_ @ 2023-01-08 22:22:24
@[_Revenge_](/user/750803) 是!
by _Revenge_ @ 2023-01-08 22:23:03
@[_Revenge_](/user/750803)
拿去!
```cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
const int N = 1e5 + 50;
const int M = 1e5 + 50;
const int Mod = 1e9 + 7;
#define int long long
inline int read()
{
int x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9')
{
if (ch == '-')
f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9')
{
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar();
}
return x * f;
}
int n;
int p[N], v[N];
bool vis[N];
int in[N];
int ans = 0;
int Min;
void dfs(int u)
{
vis[u] = 1;
if (vis[p[u]])
{
Min = min(Min, v[u]);
return;
}
Min = min(Min, v[u]);
dfs(p[u]);
}
queue<int> q;
void topo()
{
for (int i = 1; i <= n; i++)
{
if (!in[i])
q.push(i);
}
while (!q.empty())
{
int x = q.front();
q.pop();
ans += v[x];
in[p[x]]--;
vis[x] = 1;
if (!in[p[x]])
q.push(p[x]);
}
}
signed main()
{
n = read();
for (int i = 1; i <= n; ++i)
p[i] = read(), in[p[i]]++, v[i] = read();
topo();
for (int i = 1; i <= n; ++i)
if (!vis[i])
ans += v[i];
for (int i = 1; i <= n; ++i)
if (!vis[i])
{
Min = Mod;
dfs(i);
ans -= Min;
}
printf("%lld\n", ans);
return 0;
}
```
by _Revenge_ @ 2023-01-08 22:23:33
《自导自演》
by lazy_doghead @ 2023-01-08 22:44:07
JC?!
by incra @ 2023-10-04 12:45:31