您的位置:首页 > 其它

2017"百度之星"程序设计大赛-资格赛-1002-度度熊的王国战略

2017-08-07 14:53 190 查看
ACM模版

描述



题解

其实这个题简单的有些让人不敢写,因为资格赛应该是没有签到题的……一直怀疑自己是不是读错题了,或者没有搞懂它真正的意图。

其实就是判断一下连通性,一个并查集就好了,如果一开始就没有联通,那么结果就是 0,如果是连通的,我们只消的将某一个点删掉即可,这个点是哪个呢?就是和他连通的边的权值和最小的点。

感觉真的好简单,但是看到 AC 人数那么少,真是不敢写……然后强势懵一波,就这样,A 了~~~

代码

#include <cstdio>
#include <cstring>
#include <algorithm>

#define clr(a, b) memset(a, b, sizeof(a))

using namespace std;

const int MAXN = 3333;

int n, m;
int val[MAXN];
int pre[MAXN];

int find(int x)
{
if (pre[x] == 0)
{
return x;
}
return pre[x] = find(pre[x]);
}

int main(void)
{
while (~scanf("%d%d", &n, &m))
{
clr(pre, 0);
clr(val, 0);

int cnt = n - 1;
int u, v, w, u_, v_;
for (int i = 1; i <= m; i++)
{
scanf("%d%d%d", &u, &v, &w);
if (u == v)
{
continue;
}

val[u] += w;
val[v] += w;
u_ = find(u);
v_ = find(v);
if (u_ != v_)
{
pre[u_] = v_;
cnt--;
}
}

if (cnt == 0)
{
sort(val + 1, val + n + 1);
printf("%d\n", val[1]);
}
else
{
printf("0\n");
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  并查集
相关文章推荐