POJ 3713 Transferring Sylla(图的三联通,tarjan算法
来源:互联网 发布:淘宝插件看别人数据 编辑:程序博客网 时间:2024/05/16 08:24
http://www.hankcs.com/program/algorithm/poj-3713-transferring-sylla.html
思路和解答可以参考上面这一篇文章,很详细。这个题一开始tle了若干发,结果把临接矩阵换成临接表a了。。。。。。本来图论题有时候就会出现卡常熟的情况,如果不是需要删边删点什么的临接矩阵还是慎用。。。。。。。
#include<iostream>#include<string>#include<cstring>#include<iomanip>#include<cstdio>#include<algorithm>#include<vector>#include<cmath>#include<set>#include<cctype>#include<memory>#include<cstdlib>#include<map>#include<list>#include<queue>#include<stack>#include<climits>#include<complex>#include<utility>#include<functional>using namespace std;#define INF 0x7fffffff#define RE cerr<<"REdebuge"<<endl;#define M7 1000000007#define M9 1000000009#define set0(a) memset((a),0,sizeof (a))#define pb push_back#define ifor(s,n) for(long long i=(s);i<(n);i++)#define rep(rep_val) for(int REP_i=0;REP_i<(rep_val);REP_i++)#define eps 1e-7typedef long long ll;typedef pair<int, int> Poi;const int maxv=505;int tarjan_clo=0;vector<int> G[maxv];int pos[maxv];////时间戳标注的该点的位置int low[maxv];/////从该点能回到的位置最小的节点bool cut[maxv];bool fd=0;bool mark[maxv];int n,m;int tarjan_dfs(int u,int fa){if(fd) return INF;int child=0;int lowu=pos[u]=++tarjan_clo;for(int i=0;i<G[u].size();i++){int &v=G[u][i];if(!pos[v]&&pos[v]!=-1){child++;int lowv=tarjan_dfs(v,u);lowu=min(lowu,lowv);if(lowv>=pos[u])cut[u]=1;}else if(pos[v]<pos[u]&&pos[v]!=-1&&pos[v]!=0&&v!=fa){lowu=min(lowu,pos[v]);}}if(fa<0&&child==1) cut[u]=0;if(cut[u]) fd=1;return low[u]=lowu;}void dfs0(int u){mark[u]=1;for(int i=0;i<G[u].size();i++){if(!mark[G[u][i]]){dfs0(G[u][i]);}}return;}bool is_connected(){set0(mark);dfs0(0);bool f=1;for(int j=0;j<n;j++) if(mark[j]==0) f=0;return f;}bool solve(){for(int rm=0;rm<n;rm++){set0(pos);set0(low);set0(cut);pos[rm]=-1;int s=rm==0?1:0;tarjan_clo=0;fd=0;tarjan_dfs(s,-1);if(fd)return false;}return true;}int main(){ //freopen("in","r",stdin); while(cin>>n>>m,n){ ifor(0,maxv) G[i].clear(); rep(m){ int a,b; scanf("%d%d",&a,&b); G[a].pb(b);G[b].pb(a); } if(!is_connected()){ puts("NO"); continue; } if(solve()) puts("YES"); else puts("NO"); }return 0;}
0 0
- POJ 3713 Transferring Sylla(图的三联通,tarjan算法
- POJ-3713-Transferring Sylla
- Transferring Sylla POJ, 3713
- POJ,3713 Transferring Sylla
- [POJ 3713] Transferring Sylla (枚举删点+Tarjan求割点)
- Poj 3713 Transferring Sylla 3-连通
- POJ 3713 Transferring Sylla 已翻译
- poj3713 Transferring Sylla 枚举+tarjan判割点
- poj Transferring Sylla(如何快速的判断一个图是否是3—连通图,求割点,割边)
- 强联通图的Tarjan算法
- POJ3713-Transferring Sylla
- POJ3713: Transferring Sylla 题解
- POJ3713-Transferring Sylla
- POJ 2186 popular cow 有向图的强联通问题 Tarjan算法
- POJ 2186 popular cow 有向图的强联通问题 Tarjan算法
- poj 3713 三联通图
- 【模板】图的双联通分支 ,tarjan算法
- 强联通分量的tarjan算法
- PHP环境配置
- 安装PHP开发环境及部署PHP项目
- git常用命令
- leetcode || 59、 Spiral Matrix II
- linux内存管理
- POJ 3713 Transferring Sylla(图的三联通,tarjan算法
- 3.22
- 瓷砖铺放
- HDU 4632 Palindrome subsequence (区间DP)
- poj 3723
- popToViewController的正确使用方法
- SVG Sprite
- leetcode Binary Tree Level Order Traversal
- 作业Ohoh