题目链接:传送门

有仇恨的骑士不能相邻,那就在没有仇恨的骑士之间连边,意义就是他们可以相邻
要求骑士的座位形成一个环,那么入度为0或者为1的骑士是无法被加进来的
而且要求环是有奇数个点,这就用到判断奇环的方法,其实就是判断这个图是不是二分图,交叉染色判断即可
找到每个符合条件的环之后将环内的骑士标号,最后答案减去这些骑士就是要被踢出去的
这里的环要用判断割点的方法而不能缩点,因为我们只需要找到一个个的连通分量,从小的环开始判断才能获得更多的环使答案更优

#include <bits/stdc++.h>
#define A 1010
#define B 2000010using namespace std;
typedef long long ll;
struct node {int next, to;}e[B];
int head[A], num;
void add(int fr, int to) {e[++num].next = head[fr]; e[num].to = to; head[fr] = num;}
int n, m, a, b; bool hate[A][A], exi[A], bl[A];
int dfn[A], cnt, low[A], col[A], sta[A], top;
vector<int> v;
bool check(int s) {queue<int> q; q.push(s); col[s] = 1;while (!q.empty()) {int fr = q.front(); q.pop(); int color = (col[fr] == 1 ? 2 : 1);for (int i = head[fr]; i; i = e[i].next) {int ca = e[i].to;if (!exi[ca]) continue;if (!col[ca]) col[ca] = color, q.push(ca);else if (col[ca] != color) return true;}}return false;
}
void tarjan(int fr) {dfn[fr] = low[fr] = ++cnt; sta[++top] = fr;for (int i = head[fr]; i; i = e[i].next) {int ca = e[i].to;if (!dfn[ca]) {tarjan(ca); low[fr] = min(low[fr], low[ca]);if (dfn[fr] <= low[ca]) {v.clear(); int p;do {p = sta[top--];v.push_back(p);} while (p != ca);v.push_back(fr);memset(col, 0, sizeof col); memset(exi, 0, sizeof exi);for (auto j : v) exi[j] = 1;if (check(v[0])) for (auto j : v) bl[j] = 1;}}else low[fr] = min(low[fr], dfn[ca]);}
}int main(int argc, char const *argv[]) {while (scanf("%d%d", &n, &m) and n and m) {memset(head, 0, sizeof head); num = 0; cnt = 0; memset(bl, 0, sizeof bl);memset(dfn, 0, sizeof dfn); memset(low, 0, sizeof low); top = 0;memset(sta, 0, sizeof sta); memset(hate, 0, sizeof hate);for (int i = 1; i <= m; i++) scanf("%d%d", &a, &b), hate[a][b] = hate[b][a] = 1;for (int i = 1; i <= n; i++)for (int j = i + 1; j <= n; j++)if (!hate[i][j]) add(i, j), add(j, i);for (int i = 1; i <= n; i++) if (!dfn[i]) tarjan(i);int ans = n;for (int i = 1; i <= n; i++) if (bl[i]) ans--;printf("%d\n", ans);}return 0;
}

AcWing 365. 圆桌骑士相关推荐

  1. 圆桌骑士 图的连通性

    题目描述 圆桌骑士是一个非常吸引人的职业.因此,在最近几年里,亚瑟王史无前例的扩招圆桌骑士,并不令人惊讶.现在这里有许多圆桌骑士,每个圆桌骑士都收到一份珍贵的邀请函,被邀请去英灵殿圆桌.这些骑士将要环 ...

  2. 强连通分量 圆桌骑士

    题目描述 圆桌骑士是一个非常吸引人的职业.因此,在最近几年里,亚瑟王史无前例的扩招圆桌骑士,并不令人惊讶.现在这里有许多圆桌骑士,每个圆桌骑士都收到一份珍贵的邀请函,被邀请去英灵殿圆桌.这些骑士将要环 ...

  3. POJ2942 UVA1364 Knights of the Round Table 圆桌骑士

    POJ2942 洛谷UVA1364(博主没有翻墙uva实在是太慢了) 以骑士为结点建立无向图,两个骑士间存在边表示两个骑士可以相邻(用邻接矩阵存图,初始化全为1,读入一对憎恨关系就删去一条边即可),则 ...

  4. POJ 2942 圆桌骑士 (点双学习笔记)

    割点 在无向连通图G上进行如下定义: • 割点:若删掉某点P后,G分裂为两个或两个以上的子图,则称P为G的割点. • 割点集合:在无向连通图G中,如果有一个顶点集合,删除这个顶点集合以及与该点集中 的 ...

  5. 以圆桌骑士为例浅尝HTML5游戏开发

    随着XHTML的逐渐式微,Chrome,Safari,FireFox,Opera等现代浏览器正在积极完善HTML5实现,IE9也加入到标准的行列并将在今年上半年发布正式版,HTML5时代来临了. 在各 ...

  6. 网页中在线玩圆桌骑士

    演示一个在网页中在线玩街机游戏圆桌骑士的代码: http://www.return8090.com

  7. JS版圆桌骑士DEMO

    同学们,我参加了IE9开发大赛,作品是网页版圆桌骑士,喜欢的话帮忙投票吧! [url=http://ie9.onlinevoc.cn/contest/PercodPage.aspx?ID=43]htt ...

  8. flash硕思闪客V2005便携绿色破解版圆桌骑士简体中文豪华套装

    flash硕思闪客V2005便携绿色破解版圆桌骑士简体中文豪华套装 flash硕思闪客V2005便携绿色破解版圆桌骑士简体中文豪华套装 http://down.htcnc.net/Software/C ...

  9. LA 3523 圆桌骑士

    题目链接:http://vjudge.net/contest/141787#problem/A http://poj.org/problem?id=2942 此题很经典 知识点:DFS染色,点-双连通 ...

最新文章

  1. Golang实现requests库
  2. Wand mixture在Horseshoe模型中的应用
  3. android 从相册或相机获取图片并且裁剪 支持android 7.0
  4. UltraEdit批量删除关键字所在的指定行
  5. HDU - 6661 Acesrc and String Theory (后缀数组)
  6. android 渲染流程
  7. 如何让博客变得稍稍好看
  8. CSS3那些不为人知的高级属性
  9. Android JNI层确保只有一个进程的一个实现
  10. 处理器阉割版和满血版有什么区别?
  11. 计算机快捷键任务管理器,打开电脑任务管理器快捷键是什么
  12. C语言高效编程的四大秘技之以空间换时间
  13. Windows电脑如何访问小米路由器的移动硬盘
  14. 地理信息系统名词解释大全
  15. 大话数据结构 —— 2.9 算法时间复杂度(合集)
  16. H3C交换机DHCP排查
  17. List在遍历时修改元素会怎样?——学习笔记
  18. 锐龙R3 3100和R3 3300X对比 哪个好
  19. 西电微电子考研初试经验贴
  20. ORA-20005: object statistics are locked (stattype = ALL)-转

热门文章

  1. 计算机相关名人,探寻计算机发展史上的名人足迹
  2. 企业应尽早使用BIM技术——BIM带来的优势
  3. Chrome浏览器背景颜色设置为豆沙绿保护色详细教程!
  4. amp;#9733;平衡法则在生活中的应用
  5. 专业放心的python入门视频_手把手教你掌握学习Python方法,让你不再从入门到放弃...
  6. 安卓最牛教材!2021大厂Android面试经历,吐血整理
  7. WEB开发技能树-JavaScript-DOM
  8. python 新式类_【Python】Python 新式类介绍
  9. matlab拉氏逆变换,偏微分方程的拉氏变换解法.ppt
  10. “核高基”专项与永中软件的大事记