求出每个点双连通分量,如果在一个点双连通分量中有奇环,则这个分量每个点都在一个奇环中。  关键是要知道怎么求点双连通分量以及点双连通的性质。

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 ;
}

最新文章

  1. Android学习第三天-打包常用命令
  2. Android 动画 setVisibility 后出错解决方法
  3. EF——继承映射关系TPH、TPT和TPC的讲解以及一些具体的例子 05 (转)
  4. 【流媒體】live555—VS2008 下live555编译、使用及测试
  5. Arp欺骗攻击的另类应用之屌丝泡妞记
  6. 小米2s的座充,看看这个是什么芯片? - 电池&综合DIY(Flashlight Electronics-Batteries Include - 手电大家谈-手电筒爱好者之家
  7. 59、jQuery初识
  8. numpy.random中的shuffle和permutation以及mini-batch调整数据集(X, Y)
  9. lr-web services协议
  10. 多个微信小程序一个服务端架构
  11. PS调出甜美艺术外景女生照片
  12. CentOS6.8下查看yum及rpm安装后的软件位置
  13. memory prefix inter,intra,intro,iso out 5
  14. Shell条件表达式
  15. web自动化测试中接口测试学习笔记
  16. java虚拟机加载系统环境变量到内存中
  17. CNN的学习笔记
  18. Golang 使用FreeType-go进行字体
  19. Flask系列(五)Flask实现分页
  20. 第3章—高级装配—配置profile bean

热门文章

  1. 我为什么学习Windows编程
  2. Centos 7 进入单用户模式图文详解
  3. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-人机界面如何修改界面皮肤
  4. 用C#封装的ServiceStack.redis操作类
  5. sql中limit和汇总函数的集合使用
  6. OpenERP7.0 忘记admin管理员密码解决办法
  7. java之方法的重写
  8. olede读excel
  9. IIS如何添加m3u8流媒体类型
  10. python c example2:pylame2