fzu2181(点的双连通分量+求奇环)
2024-09-05 13:07:00
求出每个点双连通分量,如果在一个点双连通分量中有奇环,则这个分量每个点都在一个奇环中。 关键是要知道怎么求点双连通分量以及点双连通的性质。
fzu2181 http://acm.fzu.edu.cn/problem.php?pid=2181
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 1100 int n,m,k;
int g[N][N];
int vis[N];
int height[N];
int stk[N];
int deep,top;
int mark[N];
int save[N]; //用来记录特殊状态
int ans; int dfs(int s,int num)
{
vis[s]=deep++;
stk[top++]=s;
height[s]=num;
int mi=vis[s];
for(int i=;i<=n;i++)
{
if(g[s][i]==) continue;
if(vis[i]==-) //这个点未被访问
{
dfs(i,num+);
if( vis[i]>=vis[s] )//表示这个圈与世无争,必须单独处理掉
{
//开始处理!
int cnt=;
int tcnt=;
int flag=;
while(stk[top-]!=s)
{
cnt++;
if(mark[stk[top-]]==) flag=;//表示这一堆有奇环
if(save[stk[top-]]==) tcnt++;
top--;
} if(flag==)//这一堆不存在奇环
{
save[s]=;
ans += cnt+-tcnt;
} }
else
{
mi = min(mi,vis[i]);
}
}
else
{
mi=min(mi,vis[i]);//找当前能到达最上方的点
if( (height[s]-height[i])%== )//表示当前点在一个奇环中
mark[s]=;
}
}
vis[s]=mi;
return vis[s];
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&m,&k);
memset(g,,sizeof(g));
for(int i=;i<m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
g[x][y]=g[y][x]=;
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(i==j) g[i][j]=;
else if(g[i][j]==) g[i][j]=;
else g[i][j]=;
}
//构建逆图
memset(vis,-,sizeof(vis));
memset(save,,sizeof(save));
memset(mark,,sizeof(mark));
deep=;
top=;
ans=;//表示有多少不能参与游戏
for(int i=;i<=n;i++)
{
if(vis[i]==-)
{
dfs(i,);
}
}
if(ans<k) printf("What a Pity.\n");
else printf("Let's Fire!\n");
}
return ;
}
最新文章
- Android学习第三天-打包常用命令
- Android 动画 setVisibility 后出错解决方法
- EF——继承映射关系TPH、TPT和TPC的讲解以及一些具体的例子 05 (转)
- 【流媒體】live555—VS2008 下live555编译、使用及测试
- Arp欺骗攻击的另类应用之屌丝泡妞记
- 小米2s的座充,看看这个是什么芯片? - 电池&综合DIY(Flashlight Electronics-Batteries Include - 手电大家谈-手电筒爱好者之家
- 59、jQuery初识
- numpy.random中的shuffle和permutation以及mini-batch调整数据集(X, Y)
- lr-web services协议
- 多个微信小程序一个服务端架构
- PS调出甜美艺术外景女生照片
- CentOS6.8下查看yum及rpm安装后的软件位置
- memory prefix inter,intra,intro,iso out 5
- Shell条件表达式
- web自动化测试中接口测试学习笔记
- java虚拟机加载系统环境变量到内存中
- CNN的学习笔记
- Golang 使用FreeType-go进行字体
- Flask系列(五)Flask实现分页
- 第3章—高级装配—配置profile bean