HDU - 5438 Ponds(拓扑排序删点+并查集判断连通分量)
题目:
给出一个无向图,将图中度数小于等于1的点删掉,并删掉与他相连的点,直到不能在删为止,然后判断图中的各个连通分量,如果这个连通分量里边的点的个数是奇数,就把这些点的权值求和。
思路:
先用拓扑排序删点并更新各个点的度数,然后用并查集判断各个连通分量里边的点个数的奇偶性就ok了。
代码:
#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <iomanip>
#define MAX 1000000000
#define inf 0x3f3f3f3f
#define FRE() freopen("in.txt","r",stdin) using namespace std;
typedef long long ll;
const int maxn = ;
int degree[maxn],fa[maxn],cnt[maxn],vis[maxn];
int p,m;
ll val[maxn],sum[maxn];
vector<int> mp[maxn]; void init()
{
memset(cnt,,sizeof(cnt));
memset(degree,,sizeof(degree));
memset(sum,,sizeof(sum));
memset(vis,,sizeof(vis));
for(int i=; i<maxn; i++)
{
fa[i] = i;
mp[i].clear();
}
} int _find(int x)
{
return fa[x]==x?x:fa[x] = _find(fa[x]);
} void check()
{
for(int i=; i<=p; i++)
{
printf("%d ",degree[i]);
}
printf("\n");
} int main()
{
//FRE();
int kase;
scanf("%d",&kase);
while(kase--)
{
init();
scanf("%d%d",&p,&m);
for(int i=; i<=p; i++)
{
scanf("%lld",&val[i]);
}
for(int i=; i<m; i++)
{
int u,v;
scanf("%d%d",&u,&v);
degree[u]++;
degree[v]++;
mp[u].push_back(v);
mp[v].push_back(u);
u = _find(u);//将同一个连通分量里边的点连接
v = _find(v);
if(u!=v)
fa[u] = v;
}
//check();
queue<int> que;
for(int i=; i<=p; i++)
{
if(degree[i]<=)
que.push(i);
}
while(!que.empty())//利用拓扑排序删点
{ int u = que.front(); que.pop();
//cout<<u<<endl;
vis[u] = ;
for(int i=; i<mp[u].size(); i++)
{
degree[mp[u][i]]--;
if(!vis[mp[u][i]] && degree[mp[u][i]]<=)
que.push(mp[u][i]);
}
}
//check();
ll ans = ;
for(int i=; i<=p; i++)
{
if(degree[i]<=) continue;
int r = _find(i);
cnt[r]++;//统计该连通分量里边的点的个数
sum[r] += val[i];//该连通分量的权值的和
}
for(int i=; i<=p; i++)
{
if(cnt[i]%)
{
ans += sum[i];
}
}
printf("%lld\n",ans);
}
return ;
}
HDU - 5438 Ponds(拓扑排序删点+并查集判断连通分量)的更多相关文章
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- HDU 1811 Rank of Tetris 【拓扑排序】+【并查集】
<题目链接> 题目大意: 给你N个点(编号从0到N-1)和M个关系,要你判断这个图的所有点的顺序是否可以全部确定.不过对于任意点的关系可能存在A>B或A<B或A=B三种情况,如 ...
- HDU1811 拓扑排序判环+并查集
HDU Rank of Tetris 题目:http://acm.hdu.edu.cn/showproblem.php?pid=1811 题意:中文问题就不解释题意了. 这道题其实就是一个拓扑排序判圈 ...
- hdu 5438(类似拓扑排序)
Ponds Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Sub ...
- HDU.2647 Reward(拓扑排序 TopSort)
HDU.2647 Reward(拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 这道题有一点变化是要求计算最后的金钱数.最少金钱值是888,最少的 ...
- hdu 5438 Ponds(长春网络赛 拓扑+bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5438 Ponds Time Limit: 1500/1000 MS (Java/Others) ...
- HDU5438:Ponds(拓扑排序)
Ponds Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Sub ...
- ACM: hdu 2647 Reward -拓扑排序
hdu 2647 Reward Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Des ...
- HDU 2647 Reward (拓扑排序)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2647 题意是给你n点m条有向边,叶子点(出度为0)上的值为888,父亲点为888+1,依次计算... ...
随机推荐
- 黑客攻防技术宝典web实战篇:查找源代码中的漏洞习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 列出 3 种可在源代码中找到明确签名的常见漏洞. (a) 跨站点脚本(b) SQL 注入( ...
- 黑客攻防技术宝典web实战篇:核心防御机制习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 黑客攻防技术宝典web实战篇是一本非常不错的书,它的著作人之一是burpsuite的作者,课后的习题值得关注 ...
- eclipse中alt+/的作用
一般情况下alt+/有代码提示作用,还有代码提示的快捷代码也不是alt+/,因此要恢复代码提示用alt+/.需要做两件事.在 Window - Preferences - General - Keys ...
- 找不到javax.servlet.Filter的类文件
在这里我是用IDEA来开发的,Tomcat用的maven插件 原因:没有相应在jar包 解决:导入相应在jar的依赖,在pom文件中添加 <dependency> <groupId& ...
- NowCoder小定律
题目:https://www.nowcoder.com/pat/2/problem/259 #include <cstdio> #include <cstring> #incl ...
- Python标准库 datetime
>>> import datetime >>> now = datetime.datetime.now() >>> now datetime.da ...
- python之self本类对象
不知道写点啥好,讲的都太绕了 似懂非懂,貌似懂了 以后再补充吧,视频day8_3中的20——60分钟那一部分
- ARC 100
链接 https://arc100.contest.atcoder.jp/ C Linear Approximation 题解 把ai减去i后排序, 我们要的b就是排完序后的中位数 Code #inc ...
- 虚方法virtual详解
虚方法virtual详解 从C#的程序编译的角度来看,它和其它一般的函数有什么区别呢?一般函数在编译时就静态地编译到了执行文件中,其相对地址在程序运行期间是不发生变化的,也就是写死了的!而虚函数在 ...
- CSS进阶:提高你前端水平的 4 个技巧
译者注:随着 Node.js .react-native 等技术的不断出现,和互联网行业的创业的层出不穷,了解些前端知识,成为全栈攻城师,快速的产出原型,展示你的创意,对程序员,尤其是在创业的程序员来 ...