题目:

给出一个无向图,将图中度数小于等于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(拓扑排序删点+并查集判断连通分量)的更多相关文章

  1. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  2. HDU 1811 Rank of Tetris 【拓扑排序】+【并查集】

    <题目链接> 题目大意: 给你N个点(编号从0到N-1)和M个关系,要你判断这个图的所有点的顺序是否可以全部确定.不过对于任意点的关系可能存在A>B或A<B或A=B三种情况,如 ...

  3. HDU1811 拓扑排序判环+并查集

    HDU Rank of Tetris 题目:http://acm.hdu.edu.cn/showproblem.php?pid=1811 题意:中文问题就不解释题意了. 这道题其实就是一个拓扑排序判圈 ...

  4. hdu 5438(类似拓扑排序)

    Ponds Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Sub ...

  5. HDU.2647 Reward(拓扑排序 TopSort)

    HDU.2647 Reward(拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 这道题有一点变化是要求计算最后的金钱数.最少金钱值是888,最少的 ...

  6. hdu 5438 Ponds(长春网络赛 拓扑+bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5438 Ponds Time Limit: 1500/1000 MS (Java/Others)     ...

  7. HDU5438:Ponds(拓扑排序)

    Ponds Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Sub ...

  8. ACM: hdu 2647 Reward -拓扑排序

    hdu 2647 Reward Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Des ...

  9. HDU 2647 Reward (拓扑排序)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2647 题意是给你n点m条有向边,叶子点(出度为0)上的值为888,父亲点为888+1,依次计算... ...

随机推荐

  1. 模板 - 数学 - 快速傅里叶变换/快速数论变换(FFT/NTT)

    先看看. 通常模数常见的有998244353,1004535809,469762049,这几个的原根都是3.所求的项数还不能超过2的23次方(因为998244353的分解). 感觉没啥用. #incl ...

  2. JZOJ4307. 【NOIP2015模拟11.3晚】喝喝喝

    Description

  3. 强连通分量再探 By cellur925

    我真的好喜欢图论啊. (虽然可能理解的并不深hhh) 上一次(暑假)我们初探了强联通分量,这一次我们再探.(特别感谢pku-lyc老师的课件.有很多引用) 上次我们忘记讨论复杂度了.tarjan老爷爷 ...

  4. github最值得收藏的Bootstrap3后台管理框架

    1. AdminLTE AdminLTE是一个完全响应的后台管理模板.基于Bootstrap3框架.高度可定制,易于使用.适合许多屏幕分辨率从小型移动设备到大型台式机. GitHub AdminLTE ...

  5. python3_linux安装

    python安装包地址 https://www.python.org/ftp/python/ 如果没有c complie,就安装: yum -y install gcc gcc-c++ 在编译安装之前 ...

  6. LCA最近公共祖先知识点整理

    题解报告:hdu 2586 How far away ? Problem Description There are n houses in the village and some bidirect ...

  7. PopupWindow(3)back,home 键无法关闭popupwindow的解决方案

    private PopupWindow mPopupWindow; //popup window 一般popuowindow 要都个显示view,本例子中view模拟菜单. private View ...

  8. What's mean ORA-25191?

    1.在给表授权的时候.报错ORA-25191 检查该表为IOT 表 . --因为不是按照单表方式授予权限,而是按照用户的方式授予权限,所以该表的父亲表都在该用户下,所以这个报错可以忽略. 2/ 在参考 ...

  9. qconshanghai2017

    https://2017.qconshanghai.com/schedule 第一天 (2017/10/17 星期二) 时间 日程 07:45-09:00 签到 上午 主题演讲 软件质量优化与平台创新 ...

  10. 移动端UI自动化Appium测试——Android系统下使用uiautomator viewer查找元素

        在利用Appium做自动化测试时,最重要的一步就是获取对应的元素值,根据元素来对对象进行对应的操作,如何获得对象元素呢?Appium Server Console其实提供了一个界面对话框&qu ...