HDU5438--Ponds (拓排+BFS)
题意:给定n个池塘,m对池塘相连,现在要将与少于2个池塘相连的池塘拆除,形成森林,求节点数为奇数的树权值之和
思路:按照拓排的思想不断删除度数小于2的节点
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e4+5;
vector <ll> G[N];
queue <ll> Q;//拓排队列
queue <ll> P;//BFS队列
bool visit[N];//符合条件的点
ll value[N];
ll vis[N];//bfs遍历过的点
ll degree[N];//度数
ll m,n,ans;
void topsort()
{
while(!Q.empty()) Q.pop();
for(int i=1;i<=n;i++)
{
if(degree[i]<2)
{
if(degree[i]==1) Q.push(i);
visit[i]=1;
}
}
while(!Q.empty())
{
ll temp=Q.front();
Q.pop();
int len=G[temp].size();
for(int i=0;i<len;i++)
{
if(--degree[G[temp][i]]<2)
{
if(degree[G[temp][i]]==1) Q.push(G[temp][i]);
visit[G[temp][i]]=1;
}
}
}
}
ll bfs(int x)
{
ll sum=value[x],num=1;
P.push(x);
vis[x]=1;
while(!P.empty())
{
ll temp=P.front();
P.pop();
int len=G[temp].size();
for(int i=0;i<len;i++)
{
if(!vis[G[temp][i]]&&!visit[G[temp][i]])
{
P.push(G[temp][i]);
vis[G[temp][i]]=1;
num++;
sum+=value[G[temp][i]];
}
}
}
if(num&1) return sum;
return 0;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(vis,0,sizeof(vis));
memset(visit,0,sizeof(visit));
memset(degree,0,sizeof(degree));
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++)
scanf("%lld",&value[i]);
for(int i=1;i<=n;i++)
G[i].clear();
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
degree[x]++;
degree[y]++;
G[x].push_back(y);
G[y].push_back(x);
}
topsort();
ans=0;
for(int i=1;i<=n;i++)
{
if(!vis[i]&&!visit[i])
ans+=bfs(i);
}
printf("%lld\n",ans);
}
return 0;
}
HDU5438--Ponds (拓排+BFS)的更多相关文章
- codeforces 721C (拓排 + DP)
题目链接:http://codeforces.com/contest/721/problem/C 题意:从1走到n,问在时间T内最多经过多少个点,按路径顺序输出. 思路:比赛的时候只想到拓排然后就不知 ...
- HDU-2647 Reward ,逆拓排。
Reward 发工资,以前看过这题,做没做忘了(应该是没做). 很明显的拓排.但数据范围这么大,吓得我当时就不敢动手.后来找题解发现还是相当于两层循环(are you kidding me?)当时卡在 ...
- The Party and Sweets CodeForces - 1159C (拓排)
优化连边然后拓排. #include <iostream> #include <sstream> #include <algorithm> #include < ...
- hdu5438 Ponds[DFS,STL vector二维数组]
目录 题目地址 题干 代码和解释 参考 题目地址 hdu5438 题干 代码和解释 解答本题时参考了一篇代码较短的博客,比较有意思,使用了STL vector二维数组. 可以结合下面的示例代码理解: ...
- hdu5438 Ponds dfs 2015changchun网络赛
Ponds Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Sub ...
- HDU5438:Ponds(拓扑排序)
Ponds Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Sub ...
- hdu5438 Ponds
Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submissi ...
- [poj2762] Going from u to v or from v to u?(Kosaraju缩点+拓排)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Going from u to v or from v to u? Tim ...
- uva12489 Combating cancer(树同构)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud https://uva.onlinejudge.org/index.php?opt ...
随机推荐
- jquery json 操作(转)
原文:http://www.vososo.com/?p=919 Jquery-json 是 jQuery 的一个插件,可轻松实现对象和 JSON 字符串之间的转换.可序列化 JavaScript 对象 ...
- jQuery_pager.js分页
在做前端项目中,总是需要自己手写类似于这样的分页效果: 这就需要使用jQuery.pager.js文件,其使用方法为:在html中引入三个文件,分别为: <link rel="styl ...
- HtmlAgilityPack解析全国区号页面到XML
需求:完成一个城市和区号的xml配置文件 处理思路:通过HtmlAgilityPack解析一个区号页面,生产xml文件 页面:http://www.hljboli.gov.cn/html/code.h ...
- C# 检测网络链接
;//Local system uses a modem to connect to the Internet. ; //Local system uses a local area network ...
- Python Twisted介绍
原文链接:http://www.aosabook.org/en/twisted.html 作者:Jessica McKellar Twisted是用Python实现的基于事件驱动的网络引擎框架.Twi ...
- centos下cmake安装
步骤一.安装gcc等必备程序包(已安装则略过此步,用gcc -v检测) yum install -y gcc gcc-c++ make automake 步骤二.安装wget (已安装则略过此步) y ...
- 最长公共上升子序列(LICS) 模板
void LICS() { ;i<=n;i++) { ; ;j<=n;j++) { if (a[i]==b[j]) f[i][j]=ma+; ][j]; ][j]>ma) ma=f[ ...
- Highcharts导出gb2312乱码问题
Highcharts是utf-8编码的,其本地的.net导出环境也是utf-8格式的,导致网页如果采用gb2312编码,显示正常,导出就乱码了.这种现象也同样经常出现在ajax的使用过程中. ajax ...
- iOS9/iOS8界面对比 XCode7
Xcde7 bate 无需开发这账号(99¥)可以调试程序 目前是测试版 iOS9/iOS8界面对比 (注:左边为iOS8界面,右边为iOS9界面.) 1.新字体 苹果在 iOS9 中使用旧金山字体取 ...
- 【海量视频】2013年上半年BPM厂商'K2'市场活动资料集锦
3月01日 中广核K2 &SAP流程解决方案分享 活动报道:http://www.k2software.cn/k2events_content/items/k2-sap-346 ...