HDU 5438 Ponds(2015ACM/ICPC长春网络赛B)
来源:互联网 发布:udp编程bind函数的作用 编辑:程序博客网 时间:2024/05/29 14:02
【题目链接】http://acm.hdu.edu.cn/showproblem.php?pid=5438
【解题报告】
比赛的时候队友用并查集过的,对每个堆维护节点数量即可。但是比赛中对于删点操作调试了很久,最后还用了一个set来删边……
赛后看题解,领悟到可以维护一个队列来进行删点操作,队列中的点的度均小于等于1,每次取出一个点删掉,和它相邻的点如果度变成了1,那么把这个点压进队列里,直到队列为空。
之后跑一遍并查集或者bfs均可。
【参考代码】
#include<cstdio>#include<iostream>#include<vector>#include<queue>#include<cstring>using namespace std;int p,m;int v[10000+10],dep[10000+10];int vis[10000+10], vis2[10000+10];vector<int>G[10000+10];void del_point(){ queue<int>q; for( int i=1; i<=p; i++ ) if( dep[i]<=1 ) q.push( i ); while( !q.empty() ) { int v=q.front(); vis[v]=1; q.pop(); if(dep[v]==0)continue; dep[v]--; for( int j=0; j<G[v].size(); j++ )if( !vis[G[v][j]] ) { dep[G[v][j]]--; if( dep[G[v][j]]<=1 ) q.push( G[v][j] ); } }}long long bfs( int rt ){ queue<int>q; int cnt=0; long long tot=0; q.push(rt); vis2[rt]=1; while(!q.empty()) { int u=q.front(); cnt++; tot+=v[u]; q.pop(); for( int j=0; j<G[u].size(); j++ )if( !vis[G[u][j]] && !vis2[G[u][j]] ) { q.push( G[u][j] ); vis2[G[u][j]]=1; } } if(cnt&1)return tot; return 0;}int main(){ int T; cin>>T; while(T--) { memset( vis,0,sizeof(vis) ); memset( vis2,0, sizeof(vis2) ); memset( dep,0,sizeof(dep) ); scanf("%d%d",&p,&m); for( int i=1;i<=p;i++ )G[i].clear(); for(int i=1;i<=p;i++)scanf("%d",&v[i]); for( int i=1; i<=m;i++ ) { int a,b; scanf("%d%d",&a,&b); G[a].push_back(b); G[b].push_back(a); dep[a]++; dep[b]++; } del_point(); long long ans=0; for( int i=1;i<=p;i++ )if( !vis[i] && !vis2[i] ) { ans+=bfs( i ); } cout<<ans<<endl; } return 0;}
0 0
- HDU 5438 Ponds(2015ACM/ICPC长春网络赛B)
- HDU 5438 Ponds(2015ACM长春网络赛+枚举删点+DFS求联通块)
- hdu 5438 Ponds 2015长春网络赛 图论 dfs bfs
- hdu 5438 Ponds(长春网络赛 拓扑+bfs)
- HDU 5441 Travel (2015ACM/iCPC长春网络赛E )
- hdu 5438 hdu 5438 Ponds(长春网络赛 拓扑+bfs)
- hdu 5438 Ponds 2015 ACM/ICPC Asia Regional Changchun Online
- HDU 5438 Ponds (拓扑排序+DFS)2015 ACM/ICPC Asia Regional Changchun Online
- 2015 ACM ICPC 长春赛区 网络赛 HDU 5437 Alisha’s Party
- hdu 4277 USACO ORZ(2012 ACM/ICPC Asia Regional Changchun Online 长春网络赛)
- HDU 5438 Ponds (2015年长春赛区网络赛B题)
- 2015长春网络赛 ACM/ICPC Asia Regional Changchun Online
- 2012 ACM/ICPC 长春赛区网络赛 1006(dfs)
- 2012 ACM/ICPC 长春赛区网络赛
- hdu 5439 Ponds(长春网络赛——拓扑排序+搜索)
- hdu 5438 Ponds 拓扑排序+并查集 2015 ACM/ICPC Asia Regional Changchun Online
- HDU 5438 Ponds(dfs)——2015 ACM/ICPC Asia Regional Changchun Online
- 2012 ACM ICPC 长春网络赛B Alice And Bob 线段树的延伸利用
- Transaction
- 深入学习微框架:Spring Boot
- 1006--eclipse+webservice开发实例
- 我的2年苦逼狗血相亲经历(1)
- C#初始
- HDU 5438 Ponds(2015ACM/ICPC长春网络赛B)
- Dt大数据梦工厂王家林老师 Scala实战详解之 第2讲Scala函数定义,流程控制,异常处理入门实战
- 基于Go实现的分布式MQ
- 阻塞队列 生产者消费者
- 我的2年苦逼狗血相亲经历(2)
- Dt大数据梦工厂王家林老师 Scala实战详解之第3讲 Tuple、Array、Map与文件操作入门实战
- html
- nagios - remote check http
- 内核中media设备驱动的多态与继承