LOJ-10099(点双联通)
题目链接:传送门
思路:
如果图是点双联通的,即没有割点,直接从图中随意选两个点即可;
如果有一个割点,删除割点,求连通块的个数即可(在每个连通块内新建一个营救点)。
如果有多个割点,则可以通过其他割点到达,就不用新建营救点。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
typedef long long LL;
const int maxn = ;
int num[maxn],low[maxn],vis[maxn],gedian[maxn],tim,pt,root;
vector <int> vc[maxn];
vector <int> block[maxn];
stack <int> st;
int MAX(int x,int y)
{
return x>y?x:y;
}
int MIN(int x,int y)
{
return x<y?x:y;
}
void Init()
{
memset(vis,,sizeof(vis));
memset(num,,sizeof(num));
memset(low,,sizeof(low));
memset(gedian,,sizeof(gedian));
for(int i=;i<maxn;i++) vc[i].clear(),block[i].clear();
tim=;pt=;
while(!st.empty()) st.pop();
}
void Tarjan(int u,int pre)
{
num[u]=low[u]=++tim;
vis[u]=;
st.push(u);
int v,i,cnt=;
for(i=;i<vc[u].size();i++){
v=vc[u][i];
if(!vis[v]){
cnt++;
Tarjan(v,u);
low[u]=MIN(low[u],low[v]);
if((u==root&&cnt>)||(u!=root&&num[u]<=low[v])) gedian[u]=;
if(num[u]<=low[v]){
pt++;
int kk;
do{
kk=st.top();
block[pt].push_back(kk);
st.pop();
}while(!st.empty()&&kk!=v);
block[pt].push_back(u);
}
}
else low[u]=MIN(low[u],num[v]);
}
}
int main(void)
{
int n,m,x,y,i,j,T=;
while(~scanf("%d",&m)&&m){
Init();
n=;
for(i=;i<=m;i++){
scanf("%d%d",&x,&y);
n=MAX(n,MAX(x,y));
vc[x].push_back(y);
vc[y].push_back(x);
}
for(i=;i<=n;i++)
if(vis[i]==){
root=i;
Tarjan(i,-);
}
int art,len;
LL ans=,artnum=;
for(i=;i<=pt;i++){
art=;len=block[i].size();
for(j=;j<len;j++)
if(gedian[block[i][j]]) art++;
if(art==) ans+=,artnum=artnum*len*(len-)/;
else if(art==) ans++,artnum=artnum*(len-);
}
printf("Case %d: %lld %lld\n",T++,ans,artnum);
}
return ;
}
LOJ-10099(点双联通)的更多相关文章
- loj 1300( 边双联通 + 判奇圈 )
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27010 思路:首先Tarjan标记桥,然后对于dfs遍历整个图,我 ...
- POJ3177 & 求边双联通分量
题意: 给一张无向图,求加多少边使原图任意两点边双联通. SOL: 一个不会写边双点双强联通的傻逼. 一个结论:把一棵树变成满足条件的图需要加的边使入度为1的点数+1除以2.------>就是树 ...
- [POJ3177]Redundant Paths(双联通)
在看了春晚小彩旗的E技能(旋转)后就一直在lol……额抽点时间撸一题吧…… Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Tota ...
- hdu 3849 (双联通求桥)
一道简单的双联通求桥的题目,,数据时字符串,,map用的不熟练啊,,,,,,,,,,,,, #include <iostream> #include <cstring> #in ...
- hdu 4612 (双联通+树形DP)
加一条边后最少还有多少个桥,先Tarjan双联通缩点, 然后建树,求出树的直径,在直径起点终点加一条边去的桥最多, #pragma comment(linker, "/STACK:10240 ...
- 【UVA10972】RevolC FaeLoN (求边双联通分量)
题意: 给你一个无向图,要求把所有无向边改成有向边,并且添加最少的有向边,使得新的有向图强联通. 分析: 这题的解法还是很好想的.先用边双联通分量缩点,然后找新图中入度为0和为1的点,入度为0则ans ...
- lightoj 1300 边双联通分量+交叉染色求奇圈
题目链接:http://lightoj.com/volume_showproblem.php?problem=1300 边双连通分量首先dfs找出桥并标记,然后dfs交叉着色找奇圈上的点.这题只要求在 ...
- hdu 2460 poj 3694 (双联通+LCA)
在给出的两个点上加一条边,求剩下桥的数量,,不会LCA在线,就用了最普通的,先Tarjan双联通缩点,然后将缩完的图建成一棵树,树的所有边就是桥了,如果在任意两点间加一条边的话,那么从两点到最近公共祖 ...
- HDU5409---CRB and Graph 2015多校 双联通分量缩点
题意:一个联通的无向图, 对于每一条边, 若删除该边后存在两点不可达,则输出这两个点, 如果存在多个则输出第一个点尽可能大,第二个点尽可能小的. 不存在输出0 0 首先 若删除某一条边后存在多个联通分 ...
- hdu 4738 (双联通求桥)
2013 ACM/ICPC Asia Regional Hangzhou Online 题目大意:有n个岛,曹操在一些岛之间建了一些桥,每个桥上有一些士兵把守,周瑜只有一个炸弹只能炸掉一个桥,炸弹需要 ...
随机推荐
- H5入门
1.基本骨架 <!DOCTYPE html> <html> <head><title>标题</title><meta charset= ...
- SQL Merge 语法 单表查询
--项目中需要用到Merg语法,于是去网上查了资料,发现竟然都是多表查询,问题是我只有一张表,于是我纳闷了,后来我灵机一动,就搞定了!--表名:t_login(登录表)--字段:f_userName( ...
- Java 获取CPU、内存、外网IP等硬件信息
import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.Input ...
- 在做excel导出时如何将workbook直接写在输出流中
参考网址 https://blog.csdn.net/u011109420/article/details/51330677 https://blog.csdn.net/u012116457/arti ...
- rem初始化
使用css实现rem适配,头部引入即可 adaptive.js !function(e, t) { function i() { o = , e.devicePixelRatioValue = o, ...
- vue2.0一安装的插件详解
babel-runtime 对ES语法转义 fastclick 移动端300ms兼容 babel-polyfill 兼容Ie浏览器 //babel-polyfill引用 推荐采用webpack入口文 ...
- scrapy 安装流程和启动
#Windows平台 1. pip3 install wheel #安装后,便支持通过wheel文件安装软件,wheel文件官网:https://www.lfd.uci.edu/~gohlke/pyt ...
- devexpress WinForms MVVM
WinForms MVVM This section is dedicated to the Model-View-ViewModel (MVVM) architectural pattern. Yo ...
- 8K - 圆桌会议
HDU ACM集训队的队员在暑假集训时经常要讨论自己在做题中遇到的问题.每当面临自己解决不了的问题时,他们就会围坐在一张圆形的桌子旁进行交流,经过大家的讨论后一般没有解决不了的问题,这也只有HDU A ...
- PAT 甲级 1011 World Cup Betting (20)(代码+思路)
1011 World Cup Betting (20)(20 分) With the 2010 FIFA World Cup running, football fans the world over ...