hdu 3313 Key Vertex
来源:互联网 发布:淘宝情侣装类目 编辑:程序博客网 时间:2024/06/06 00:05
一个有向图,给定起点和终点,问他的割点数,割点是指去掉这个点能使得s和t不通。s和t也是割点。
先找一条从s到t的任意路径,假如没有路的话,那么割点数为n,如果找到了一条路径的话,将这条路径上的点标记出来,首先明确一点,割点肯定不会再路径外的点上,因为去掉外面的点后,还是有刚刚那条路径的。所以现在就要看路径上的每个点是不是割点。只要把路径上的点去掉,然后从s进行bfs,路径上的点不能走,这样进行bfs的记录能探访到最远的在路径上的点为ans,假如ans等于t,那么只有两个割点s和t,如果bfs结束后ans不等于t,那么ans就是一个割点。因为去掉该点之后,无法走到之后的点了。然后从ans开始继续进行bfs直到访问到t为止。
#include <cstdio>#include <cstring>#include <queue>using namespace std;#define maxn 100000+10#define maxm 300000+100#define inf 1000000000struct Edge{ int u,v,next;}e[maxm];int head[maxn],cnt;int dis[maxn],mk[maxn];int pre[maxn];int in[maxn];int n,m;int s,t;void add(int u,int v){ e[cnt].u=u; e[cnt].v=v; e[cnt].next=head[u]; head[u]=cnt++;}int solve(){ int u,v,i; memset(pre,-1,sizeof(pre)); memset(in,0,sizeof(in)); for(i=0;i<n;i++) dis[i]=-1; dis[s]=0; queue <int> Q; Q.push(s); while(!Q.empty()) { u=Q.front();Q.pop(); for(i=head[u];i!=-1;i=e[i].next) { v=e[i].v; if(dis[v]==-1) { dis[v]=dis[u]+1; pre[v]=u; Q.push(v); } } } if(dis[t]==-1) return n; for(i=t;i!=s;i=pre[i]) in[i]=-1; in[s]=-1; int sum=1; while(1) { int ans=-1,maxdis=-1; Q.push(s); while(!Q.empty()) { u=Q.front();Q.pop(); for(i=head[u];i!=-1;i=e[i].next) { v=e[i].v; if(in[v]==-1&&dis[v]>maxdis) { ans=v; maxdis=dis[v]; } else if(in[v]==0) { Q.push(v); in[v]=1; } } } sum++; if(ans==t) return sum; s=ans; }}int main(){ while(scanf("%d%d",&n,&m)!=EOF) { int i,j; int u,v; for(i=0;i<n;i++) head[i]=-1; cnt=0; for(i=1;i<=m;i++) { scanf("%d%d",&u,&v); add(u,v); } scanf("%d%d",&s,&t); printf("%d\n",solve()); } return 0;}
0 0
- hdu 3313 Key Vertex
- HDU 3313 Key Vertex
- HDU 3313 Key Vertex (bfs)
- HDU 3313 Key Vertex(dfs + bfs)
- hdu 3313 Key Vertex BFS应用
- HDU 3313 Key Vertex (网络流)
- HDU 3313 Key Vertex 求割点数(好题)
- HDU - 3313 Key Vertex(在最短路上的DFS)
- HDU 3313 Key Vertex 胡搞(网络流最小割拆点什么的人家才不会呢)
- Key Vertex (hdu 3313 SPFA+DFS 求起点到终点路径上的割点)
- hdu 3313 Key Vertex 那些AC的代码基本都是错的!
- HDU 3313 Key Vertex(BFS+BFS) 求S点到T点路径的关键点
- 【网络流】hdu3313 Key Vertex
- hdu 6150 Vertex Cover
- HDU 6150 Vertex Cover【构造】
- Hdu 6150 Vertex Cover【思维】
- HDU 6150 Vertex Cover 构造
- HDU 6150 Vertex Cover 构造
- 和大神们学习每天一题(leetcode)-Best Time to Buy and Sell Stock II
- android之动画
- C++ 连接mysql 数据库,以及query语句
- CentOS下以RPM方式安装MySQL5.5
- 【AI】Flash Builder新建一个Adobe Illustrator工程
- hdu 3313 Key Vertex
- fn去除空格后,在截取字符串
- Android Animation动画的淡入淡出、旋转、缩放和移动
- pdflush 几个参数的含义
- 【C++】【学习笔记】【030-031】错误处理和调试
- NT_iOS笔记—RegexKitLite(stringByReplacingOccurrencesOfRegex:withString:)英文时报错
- 推进 Docker 安全:Docker 1.4.0 和 1.3.3 发布
- Condition大用途
- hdu 2874 Connections between cities hdu 2586 How far away ? LCA