HDU 3849 无向图的割顶和桥模版题
来源:互联网 发布:foxtable导入外部数据 编辑:程序博客网 时间:2024/05/17 04:46
原理在lrj训练指南P312,模板!不连通图的割边是0!!所以这个题要先判断是否是连通的。另外因为要求是按照输入顺序输出,所以不得不说保存数据很麻烦。
#include<cstdio>#include<cstring>#include<cstdlib>#include<string>#include<iostream>#include<vector>#include<algorithm>#include<map>using namespace std;typedef pair<int,int> Pair;int n,m,tot,num;map<string,int>mapp;map<Pair,int>order;vector<int>g[10001];string name[10001];vector<Pair>ans;int pre[10001],dfsclock;bool vis[10001];int dfs(int u,int fa){ int lowu=pre[u]=++dfsclock; int child=0; for(int i=0; i<(int)g[u].size(); i++) { int v=g[u][i]; if(!pre[v]) { child++; int lowv=dfs(v,u); lowu=min(lowv,lowu); if(lowv>pre[u]) { Pair p; p.first=u,p.second=v; if(order[p]==false) p.first=v,p.second=u; ans.push_back(p); } } else if(pre[v]<pre[u]&&v!=fa) lowu=min(lowu,pre[v]); } return lowu;}void init(){ for(int i=0; i<n; i++) g[i].clear(); mapp.clear(); tot=0,num=0; memset(pre,0,sizeof(pre)); memset(vis,false,sizeof(vis)); dfsclock=0; ans.clear();}int cmp(Pair a,Pair b){ return order[a]<order[b];}void dff(int u){ vis[u]=true; for(int i=0; i<(int)g[u].size(); i++) { int v=g[u][i]; if(!vis[v]) dff(v); }}int presolve(){ dff(1); for(int i=1; i<=n; i++) if(!vis[i]) return 0; return 1;}int main(){// freopen("in.txt","r",stdin); int cas; cin>>cas; while(cas--) { cin>>n>>m; init(); for(int i=0; i<m; i++) { string a,b; cin>>a>>b; if(mapp[a]==false) { mapp[a]=++tot; name[tot]=a; } if(mapp[b]==false) { mapp[b]=++tot; name[tot]=b; } Pair p; int s=mapp[a],t=mapp[b]; p.first=s,p.second=t; order[p]=++num; g[s].push_back(t); g[t].push_back(s); } if(!presolve()) { cout<<0<<endl; continue; } dfs(1,-1); int t=(int)ans.size(); cout<<t<<endl; sort(ans.begin(),ans.end(),cmp); for(int i=0; i<t; i++) cout<<name[ans[i].first]<<" "<<name[ans[i].second]<<endl; } return 0;}
- HDU 3849 无向图的割顶和桥模版题
- 【无向图的割顶和桥】
- 无向图的割顶和桥
- 无向图的割顶和桥
- 无向图的割顶和桥
- 求无向图的 割点和桥 【模版】
- 无向图的割顶与桥
- 无向图的割顶与桥
- 无向图的割顶和桥,无向图的双连通分量入门详解及模板
- 图论总结(2)无向图的割顶和桥
- POJ-3352-无向图的割顶和桥-求边-双连通分量
- 深夜敲模板_4——无向图的割顶和桥
- 无向图的割顶、桥和双联通分量
- 无向图的割顶和桥(tarjan模板)
- 无向图的割顶、桥和边双连通分量
- 无向图的割顶和桥、无向图的双连通分量、有向图的强连通分量
- 连通分量 无向图的割顶和桥 无向图的双连通分量 有向图的强连通分量
- 无向图的割顶(poj1523,1144)
- 堆和栈的区别
- 黑马程序员_Java高新技术_基本类型数据的自动拆装箱及享元设计模式
- 经典收藏
- 结构体定义 typedef struct 学习
- ZeroMQ学习笔记
- HDU 3849 无向图的割顶和桥模版题
- 数据结构——单链表
- 2.2 栈的实现
- Hibernate 配置详解(11)
- sbit与sfr关键字简析
- 关于提高游戏中的打击感
- Flash图表控件FusionCharts使用JavaScript渲染图表(不用Flash)
- Ubuntu 12.04 Unity桌面环境vnc配置手记
- Android