传送门:【FZU】Problem 2181 快来买肉松饼

题目分析:无向图找奇圈的问题。首先我们做tarjan求出点双连通块,每一个块中用黑白染色法得到最长的奇圈,然后这个奇圈中不参加游戏的小孩就是这个连通块上的点个数cnt - 最长奇圈的长度dp,然后累加到ans上。则最后如果n-ans>=k则说明可以举办party,否则不行。

需要注意的是,当一个连通块只有两个点时,这两个点中只有一个点属于该连通块,是算法的特性。

代码如下:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
//#include <cmath>
using namespace std ;typedef long long LL ;#pragma comment ( linker , "/STACK:1024000000" )
#define rep( i , a , b ) for ( int i = ( a ) ; i <  ( b ) ; ++ i )
#define For( i , a , b ) for ( int i = ( a ) ; i <= ( b ) ; ++ i )
#define rev( i , a , b ) for ( int i = ( a ) ; i >= ( b ) ; -- i )
#define rec( i , A , o ) for ( int i = A[o] ; i != o ; i = A[i] )
#define clr( a , x ) memset ( a , x , sizeof a )const int MAXN = 1005 ;
const int MAXE = 2000005 ;struct Edge {int v , n ;Edge () {}Edge ( int v , int n ) : v ( v ) , n ( n ) {}
} ;Edge E[MAXE] ;
int H[MAXN] , cntE ;
int dfn[MAXN] , low[MAXN] , dfs_clock ;
int color[MAXN] ;
int bcc[MAXN] , bcc_cnt ;
int S[MAXN] , top ;
int ans ;
int dp ;
int n , m , k ;
int G[MAXN][MAXN] ;void clear () {ans = 0 ;top = 0 ;cntE = 0 ;bcc_cnt = 0 ;dfs_clock = 0 ;clr ( G , 0 ) ;clr ( H , -1 ) ;clr ( bcc , 0 ) ;clr ( dfn , 0 ) ;
}void addedge ( int u , int v ) {E[cntE] = Edge ( v , H[u] ) ;H[u] = cntE ++ ;
}void dfs ( int u , int dep ) {for ( int i = H[u] ; ~i ; i = E[i].n ) {int v = E[i].v ;if ( bcc[v] != bcc_cnt ) continue ;if ( !color[v] ) {color[v] = 3 - color[u] ;dfs ( v , dep + 1 ) ;}if ( color[v] != 3 - color[u] ) dp = max ( dp , dep ) ;}
}void tarjan ( int u , int fa = 0 ) {dfn[u] = low[u] = ++ dfs_clock ;S[top ++] = u ;for ( int i = H[u] ; ~i ; i = E[i].n ) {int v = E[i].v ;if ( v == fa ) continue ;if ( !dfn[v] ) {tarjan ( v ) ;low[u] = min ( low[u] , low[v] ) ;if ( low[v] >= dfn[u] ) {++ bcc_cnt ;int cnt = 0 ;while ( 1 ) {int x = S[-- top] ;bcc[x] = bcc_cnt ;color[x] = 0 ;cnt ++ ;if ( x == v ) break ;}cnt ++ ;bcc[u] = bcc_cnt ;color[u] = 1 ;dp = 0 ;dfs ( u , 1 ) ;//printf ( "%d %d\n" , cnt , dp ) ;if ( dp ) ans += cnt - dp ;else if ( cnt == 2 ) ans += cnt - 1 ;}} else low[u] = min ( low[u] , dfn[v] ) ;}
}void solve () {int u , v ;clear () ;scanf ( "%d%d%d" , &n , &m , &k ) ;rep ( i , 0 , m ) {scanf ( "%d%d" , &u , &v ) ;G[u][v] = G[v][u] = 1 ;}For ( i , 1 , n ) For ( j , 1 , n ) if ( i != j && !G[i][j] ) {//printf ( "%d %d\n" , i , j ) ;addedge ( i , j ) ;}For ( i , 1 , n ) if ( !dfn[i] ) tarjan ( i ) ;//printf ( "%d\n" , n - ans ) ;if ( n - ans >= k ) printf ( "Let's Fire!\n" ) ;else printf ( "What a Pity.\n" ) ;
}int main () {int T ;scanf ( "%d" , &T ) ;while ( T -- ) solve () ;return 0 ;
}

【FZU】Problem 2181 快来买肉松饼 点双连通相关推荐

  1. FZU 2181 快来买肉松饼 (dfs)

    Problem 2181 快来买肉松饼 Accept: 75 Submit: 270 Time Limit: 5000 mSec Memory Limit : 32768 KB Problem Des ...

  2. FZU 2181 快来买肉松饼(dfs)

    快来买肉松饼 题意:给出n个人, 要从他们中选出奇数个人(人数 >= k)围成圈,,接着给出m对敌对关系, 敌对关系的人不能相邻,,问能不能选出奇数个人构成圈.. 思路:将可以相邻的人建边,,那 ...

  3. 【双连通分量】 FZU 2181 快来买肉松饼

    和POJ的那道题一样的... #include <iostream> #include <queue> #include <stack> #include < ...

  4. FOJ 2181 快来买肉松饼

    链接:http://acm.fzu.edu.cn/problem.php?pid=2181 思路:乍一看以为是并查集,仔细想了下又找不到让函数结束的条件,所以就看了其他人的搜索大法 1 #includ ...

  5. bnuoj 44359 快来买肉松饼

    http://www.bnuoj.com/contest/problem_show.php?pid=44359 快来买肉松饼 Time Limit: 5000 ms     Case Time Lim ...

  6. 319元!特斯拉卡车造型哨子发布 马斯克:快来买 别给苹果抛光布交智商税

    12月1日消息,据国外媒体报道,特斯拉发售一款了限量Cybertruck造型哨子" Cyberwhistle",每只售价50美元. 从图片上看,显然这款周边设计灵感来自特斯拉即将推 ...

  7. foj2198 Problem 2198 快来快来数一数 dp 矩阵快速幂

    Problem 2198 快来快来数一数 Accept: 67 Submit: 194 Time Limit: 1000 mSec Memory Limit : 65536 KB Problem De ...

  8. FZU Problem 2238 Daxia Wzc's problem(Lucas定理求组合数)

    此文章可以使用目录功能哟↑(点击上方[+])  FZU Problem 2238 Daxia & Wzc's problem Accept: 0    Submit: 0 Time Limit ...

  9. 拓嘉辰丰电商:拼多多“快团团”买赠常见玩法

    拼多多快团团"已经在微信小程序正式上线,是一款辅助商家在线收集社区居民共同需求并在线下单及收款的团购工具.商家会把商品上线到快团团的商品团购页面,然后有消费者发起团购,团购人数达到后,商家就 ...

最新文章

  1. 14,matlab中如何查看程序中所调用的函数
  2. 评价对象检测模型的数字度量:F1分数以及它们如何帮助评估模型的表现
  3. 刷题-CC150-Java实现
  4. 获取前一天的时间安排表_要想有一个完美的婚礼 这份婚庆策划时间表少不了...
  5. C# 事务提交(非数据库)
  6. js 计时器无法清除是为什么
  7. java项目打war包
  8. bash脚本使用记录
  9. java执行python提示import os找不到_java利用Jython调用python抛出错误ImportError: No module named odbchelper...
  10. BZOJ 2836 树链剖分+线段树
  11. 通过外挂插件向预训练语言模型中融入知识
  12. 【软件使用技巧】二(Word文档损坏)
  13. 性能分析:处理器、磁盘I/O、进程、网络分析方法 http://www.cnblogs.com/fnng/archive/2012/10/30/2747246.html...
  14. 第一行代码android第三版pdf,第一行代码:Android PDF 下载
  15. Unity3D C#数学系列之求点到直线的距离
  16. 一名QQ老用户:致腾讯和马化腾的一封信
  17. Halcon图像分割-多个threshold阈值处理算子讲解
  18. PackageManagerService Android 8.1 源码解读 02
  19. SpringCloud—07—高级之SpringCloud Alibaba上
  20. 都是S赛,为什么EDG夺冠公认“含金量最高”?

热门文章

  1. Android app security安全问题总结
  2. 立创开源丨基于GD32E230C8T6芯片的开发评估板
  3. Master指令,Control指令,Register指令,PreviousPageType指令,MasterType指令
  4. 系统消息的发送和接收
  5. Django-Web 小技巧--Render函数
  6. java按键程序_一个使用JAVA编写的类似按键精灵的程序,支持脚本文件编写(含源代码)...
  7. 特斯拉入华,充电接口怎么办?
  8. R语言 计算 赫芬达尔−赫希曼指数(HHI)
  9. 小学计算机国培研修总结,小学数学教师国培研修总结(通用5篇)
  10. windows中ip地址存放的位置,及修改