刚刚打的队内训练赛的一个题
可能是今天出成绩没挂科,心情美滋滋,开了两个题都比较顺
傻爆了这个题 爆过去了,算是有点小规律,,大家都说是 用拓扑,我分享一下新做法
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
typedef long long LL;
const int maxn = 100000 + 7;
LL a[maxn]; // 值
int f[maxn];
int T, n, m;
struct ndoe {
int x;
int y;
}b[maxn];
void prep() {
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i)
a[i] = (LL)i;
int x, y;
for(int i = 0; i < m; ++i) {
scanf("%d%d", &b[i].x, &b[i].y);
if(a[b[i].x] < a[b[i].y]) a[b[i].y] = a[b[i].x];
}
while(1) {
int f = 0;
for(int i = 0; i < m; ++i) {
if(a[b[i].x] < a[b[i].y]) {
f = 1;
a[b[i].y] = a[b[i].x];
}
}
if(f) f = 0;
else break;
}
LL ans = 0;
for(int i = 1; i <= n; ++i)
ans += a[i];
cout << ans << endl;
}
int main() {
scanf("%d", &T);
while(T--) {
prep();
}
return 0;
}