学习代码#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int e[1005][1005], k, n, m, father[1005];
const int inf = 0x7fffffff;
int findfather(int x){
int a = x;
while(x != father[x])
x = father[x];
while(a != x){
int z = father[a];
father[a] = x;
a = z;
}
return x;
}
void Union(int a, int b){
int faa = findfather(a), fab = findfather(b);
if(faa != fab){
father[fab] = min(faa, fab);
father[faa] = min(faa, fab);
}
}
int main(){
scanf("%d %d %d", &k, &n, &m);
vector<int>num[n + 1], suspect;
fill(e[0], e[0] + 1005 * 1005, inf);
for(int i = 0; i < m; ++ i){
int a, b, temp;
scanf("%d %d %d", &a, &b, &temp);
if(e[a][b] == inf)
e[a][b] = 0;
e[a][b] += temp;
}
for(int i = 1; i <= n; ++ i)
for(int j = 1; j <= n; ++ j)
if(e[i][j] <= 5)
num[i].push_back(j);
for(int i = 1; i <= n; ++ i){
int len = num[i].size(), cnt = 0;
if(len <= k)
continue;
for(int j = 0; j < num[i].size(); ++ j)
if(e[num[i][j]][i] < inf)
++ cnt;
if(cnt <= (int) (0.2 * len))
suspect.push_back(i);
}
if(suspect.size() == 0)
printf("None\n");
else{
for(int i = 1; i <= n; ++ i)
father[i] = i;
for(int i = 0; i < suspect.size(); ++ i)
for(int j = i + 1; j < suspect.size(); ++ j)
if(e[suspect[i]][suspect[j]] < inf && e[suspect[j]][suspect[i]] < inf)
Union(suspect[i], suspect[j]);
vector<int>ans[n + 1];
for(int i = 0; i < suspect.size(); ++ i)
ans[findfather(suspect[i])].push_back(suspect[i]);
for(int i = 1; i <= n; ++ i){
if(ans[i].size() != 0){
sort(ans[i].begin(), ans[i].end());
for(int j = 0; j < ans[i].size(); ++ j){
if(j != 0)
printf(" ");
printf("%d",ans[i][j]);
}
printf("\n");
}
}
}
}