您的位置:首页 > 大数据 > 人工智能

Aizu - 2564 Tree Reconstruction 并查集

2015-08-22 23:49 465 查看
Aizu - 2564 Tree Reconstruction

题意:一个有向图,要使得能确定每一条边的权值,要求是每个点的入权和出权相等,问你最少需要确定多少条边

思路:这题好像有一个定理之类的,对于每一个连通块,所需要的边数是 M-N(边数-点数) ,这个原理我还不是很清楚。

  知道了这个之后,并查集求一下就完事了。

这题我大致看了一下官方 的提交记录,发现有好多种方法可以搞。23:48:40

#pragma comment(linker, "/STACK:1000000000")
#include <bits/stdc++.h>
#define LL long long
#define INF 0x3f3f3f3f
#define IN freopen("in.txt","r",stdin);
using namespace std;
#define MAXN 505
vector<int> G[MAXN];
queue<int> Q;
int father[MAXN];
int find(int x){
if(father[x] == x) return x;
father[x] = find(father[x]);
return father[x];
}
int main(void)
{
//IN;
int n, m;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++){
father[i] = i;
}
int x, y;
for(int i = 1; i <= m; i++){
scanf("%d%d", &x, &y);
x = find(x);
y = find(y);
if(x != y){
father[x] = y;
}
}
int ans = m - n;
for(int i = 1; i <= n; i++){
if(father[i] == i){
ans++;
}
}
printf("%d\n", ans);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: