AcWing 365. 圆桌骑士
题目链接:传送门
有仇恨的骑士不能相邻,那就在没有仇恨的骑士之间连边,意义就是他们可以相邻
要求骑士的座位形成一个环,那么入度为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. 圆桌骑士相关推荐
- 圆桌骑士 图的连通性
题目描述 圆桌骑士是一个非常吸引人的职业.因此,在最近几年里,亚瑟王史无前例的扩招圆桌骑士,并不令人惊讶.现在这里有许多圆桌骑士,每个圆桌骑士都收到一份珍贵的邀请函,被邀请去英灵殿圆桌.这些骑士将要环 ...
- 强连通分量 圆桌骑士
题目描述 圆桌骑士是一个非常吸引人的职业.因此,在最近几年里,亚瑟王史无前例的扩招圆桌骑士,并不令人惊讶.现在这里有许多圆桌骑士,每个圆桌骑士都收到一份珍贵的邀请函,被邀请去英灵殿圆桌.这些骑士将要环 ...
- POJ2942 UVA1364 Knights of the Round Table 圆桌骑士
POJ2942 洛谷UVA1364(博主没有翻墙uva实在是太慢了) 以骑士为结点建立无向图,两个骑士间存在边表示两个骑士可以相邻(用邻接矩阵存图,初始化全为1,读入一对憎恨关系就删去一条边即可),则 ...
- POJ 2942 圆桌骑士 (点双学习笔记)
割点 在无向连通图G上进行如下定义: • 割点:若删掉某点P后,G分裂为两个或两个以上的子图,则称P为G的割点. • 割点集合:在无向连通图G中,如果有一个顶点集合,删除这个顶点集合以及与该点集中 的 ...
- 以圆桌骑士为例浅尝HTML5游戏开发
随着XHTML的逐渐式微,Chrome,Safari,FireFox,Opera等现代浏览器正在积极完善HTML5实现,IE9也加入到标准的行列并将在今年上半年发布正式版,HTML5时代来临了. 在各 ...
- 网页中在线玩圆桌骑士
演示一个在网页中在线玩街机游戏圆桌骑士的代码: http://www.return8090.com
- JS版圆桌骑士DEMO
同学们,我参加了IE9开发大赛,作品是网页版圆桌骑士,喜欢的话帮忙投票吧! [url=http://ie9.onlinevoc.cn/contest/PercodPage.aspx?ID=43]htt ...
- flash硕思闪客V2005便携绿色破解版圆桌骑士简体中文豪华套装
flash硕思闪客V2005便携绿色破解版圆桌骑士简体中文豪华套装 flash硕思闪客V2005便携绿色破解版圆桌骑士简体中文豪华套装 http://down.htcnc.net/Software/C ...
- LA 3523 圆桌骑士
题目链接:http://vjudge.net/contest/141787#problem/A http://poj.org/problem?id=2942 此题很经典 知识点:DFS染色,点-双连通 ...
最新文章
- Golang实现requests库
- Wand mixture在Horseshoe模型中的应用
- android 从相册或相机获取图片并且裁剪 支持android 7.0
- UltraEdit批量删除关键字所在的指定行
- HDU - 6661 Acesrc and String Theory (后缀数组)
- android 渲染流程
- 如何让博客变得稍稍好看
- CSS3那些不为人知的高级属性
- Android JNI层确保只有一个进程的一个实现
- 处理器阉割版和满血版有什么区别?
- 计算机快捷键任务管理器,打开电脑任务管理器快捷键是什么
- C语言高效编程的四大秘技之以空间换时间
- Windows电脑如何访问小米路由器的移动硬盘
- 地理信息系统名词解释大全
- 大话数据结构 —— 2.9 算法时间复杂度(合集)
- H3C交换机DHCP排查
- List在遍历时修改元素会怎样?——学习笔记
- 锐龙R3 3100和R3 3300X对比 哪个好
- 西电微电子考研初试经验贴
- ORA-20005: object statistics are locked (stattype = ALL)-转
热门文章
- 计算机相关名人,探寻计算机发展史上的名人足迹
- 企业应尽早使用BIM技术——BIM带来的优势
- Chrome浏览器背景颜色设置为豆沙绿保护色详细教程!
- amp;#9733;平衡法则在生活中的应用
- 专业放心的python入门视频_手把手教你掌握学习Python方法,让你不再从入门到放弃...
- 安卓最牛教材!2021大厂Android面试经历,吐血整理
- WEB开发技能树-JavaScript-DOM
- python 新式类_【Python】Python 新式类介绍
- matlab拉氏逆变换,偏微分方程的拉氏变换解法.ppt
- “核高基”专项与永中软件的大事记