UVALive 5135 HDU 3844 Mining Your Own Business
来源:互联网 发布:php框架 知乎 编辑:程序博客网 时间:2024/06/05 14:12
题意:
一些隧道组成矿井 现在要修建尽量少的逃生通道 使得无论哪里发生事故 所有人均能逃出 求方案数
思路:
这道题比较容易联想到割点 因为只有这种点出事矿井才会不连通 那么首先就找出所有割点
分析最少要建几个逃生通道 那当然是每个连通块各一个 因此需要把求出连通块顶点数之积
最后考虑特殊情况 没有割点 那么随便两个地方建就好了 不能建一个 万一就那里出事了呢…
注意:
这题在HDU提交的时候要加栈 而且输出不能用%lld
代码:
#include<cstdio>#include<cstring>#include<algorithm>#include<set>using namespace std;#define N 50010typedef long long LL;int m,n,tot,t,ans1,res,idx;int head[N],dfn[N],low[N],cut[N],vis[N];struct edge{ int v,flag,next;}ed[N*2];LL ans2;set<int> next;void add(int u,int v){ ed[tot].v=v; ed[tot].flag=0; ed[tot].next=head[u]; head[u]=tot++;}void tarjan(int u,int fa){int i,v,son=0;dfn[u]=low[u]=++idx;for(i=head[u];~i;i=ed[i].next){v=ed[i].v;if(ed[i].flag||dfn[v]>=dfn[u]) continue;ed[i].flag=ed[i^1].flag=1;if(dfn[v]==-1){son++;tarjan(v,u);low[u]=min(low[u],low[v]);if(u!=fa&&dfn[u]<=low[v]) cut[u]=1;}else low[u]=min(low[u],dfn[v]);}if(u==fa&&son>1) cut[u]=1;}void dfs(int u){ int i,v; res++; vis[u]=1; for(i=head[u];~i;i=ed[i].next) { v=ed[i].v; if(cut[v]) next.insert(v); if(!cut[v]&&!vis[v]) dfs(v); }}int main(){int i,u,v;while(~scanf("%d",&m)){ if(!m) break; tot=n=idx=0; memset(head,-1,sizeof(head)); memset(dfn,-1,sizeof(dfn)); memset(cut,0,sizeof(cut)); memset(vis,0,sizeof(vis)); for(i=1;i<=m;i++) { scanf("%d%d",&u,&v); n=max(n,u); n=max(n,v); add(u,v); add(v,u); }tarjan(1,1);ans1=0;ans2=1;for(i=1;i<=n;i++) { if(!cut[i]&&!vis[i]) { res=0; next.clear(); dfs(i); if(next.size()==1) { ans1++; ans2*=res; } } } if(ans1==0) { ans1=2; ans2=(LL)(n)*(n-1)/2; } printf("Case %d: ",++t);printf("%d %lld\n",ans1,ans2);}return 0;}
0 0
- UVALive 5135 HDU 3844 Mining Your Own Business
- UVALive - 5135 Mining Your Own Business
- UVALive - 5135 Mining Your Own Business
- hdu 3844 Mining Your Own Business
- HDU-3844-Mining Your Own Business
- UVALive 5135 Mining Your Own Business(BCC、割顶)
- UVALive 5135 - Mining Your Own Business(点双连通)
- uvalive 5135 Mining Your Own Business(双连通分量)
- UVALive - 5135 Mining Your Own Business(双连通分量)
- HDU -- 3844 Mining Your Own Business(点双连通)
- Mining Your Own Business
- LA 5135 Mining Your Own Business
- Mining Your Own Business LA 5135
- 【UVALive】5135 Mining Your Own Business 点双连通+割顶
- UVAlive 5135 Mining Your Own Business [点双连通分量] [求割顶]
- UVALive 5135 Mining Your Own Business(点双连通分量)
- LA5135 Mining Your Own Business
- La5135 Mining your own Business
- DOM学习笔记(三)
- 题目1388:跳台阶
- 笔记03 程序的流程控制
- 【Android】模拟系统后台Kill app : 页面切后台+DDMS+Stop
- 矩阵乘法递推的优化艺术
- UVALive 5135 HDU 3844 Mining Your Own Business
- ReSIProcate之各工程功能简单介绍
- Git常用命令
- Android 设计模式之观察者模式
- POJ 2187 Beauty Contest(旋转卡壳)
- poj 2935
- 黑马程序员 C语言 - 06 数组、二维数组、字符串
- css初始化代码方案
- 集合对象