[POJ]2942 圆桌骑士 点双连通分量 + 二分图染色

PVE(Proxmox VE)添加VMware Esxi并迁移虚拟机 跨平台迁移虚拟机:从VMware虚拟化平台迁移虚拟机到PVE平台。 阅读详情

Knights of the Round Table
Time Limit: 7000MS Memory Limit: 65536K
Total Submissions: 13168 Accepted: 4393
Description

Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress, and drinking with the other knights are fun things to do. Therefore, it is not very surprising that in recent years the kingdom of King Arthur has experienced an unprecedented increase in the number of knights. There are so many knights now, that it is very rare that every Knight of the Round Table can come at the same time to Camelot and sit around the round table; usually only a small group of the knights isthere, while the rest are busy doing heroic deeds around the country.

Knights can easily get over-excited during discussions-especially after a couple of drinks. After some unfortunate accidents, King Arthur asked the famous wizard Merlin to make sure that in the future no fights break out between the knights. After studying the problem carefully, Merlin realized that the fights can only be prevented if the knights are seated according to the following two rules:
The knights should be seated such that two knights who hate each other should not be neighbors at the table. (Merlin has a list that says who hates whom.) The knights are sitting around a roundtable, thus every knight has exactly two neighbors.
An odd number of knights should sit around the table. This ensures that if the knights cannot agree on something, then they can settle the issue by voting. (If the number of knights is even, then itcan happen that yes" andno” have the same number of votes, and the argument goes on.)
Merlin will let the knights sit down only if these two rules are satisfied, otherwise he cancels the meeting. (If only one knight shows up, then the meeting is canceled as well, as one person cannot sit around a table.) Merlin realized that this means that there can be knights who cannot be part of any seating arrangements that respect these rules, and these knights will never be able to sit at the Round Table (one such case is if a knight hates every other knight, but there are many other possible reasons). If a knight cannot sit at the Round Table, then he cannot be a member of the Knights of the Round Table and must be expelled from the order. These knights have to be transferred to a less-prestigious order, such as the Knights of the Square Table, the Knights of the Octagonal Table, or the Knights of the Banana-Shaped Table. To help Merlin, you have to write a program that will determine the number of knights that must be expelled.

Input

The input contains several blocks of test cases. Each case begins with a line containing two integers 1 ≤ n ≤ 1000 and 1 ≤ m ≤ 1000000 . The number n is the number of knights. The next m lines describe which knight hates which knight. Each of these m lines contains two integers k1 and k2 , which means that knight number k1 and knight number k2 hate each other (the numbers k1 and k2 are between 1 and n ).

The input is terminated by a block with n = m = 0 .

Output

For each test case you have to output a single integer on a separate line: the number of knights that have to be expelled.

Sample Input

5 5
1 4
1 5
2 5
3 4
4 5
0 0
Sample Output

2

题目大意

亚瑟王要召开圆桌会议,有些骑士之间互相憎恨不能邻座,参加会议的人数必须是奇数(以免同票),并且不能只有一个人.
现问多少骑士无论怎样安排也不能参加会议?
多组测试数据,以0 0为输入结束标志

题解

建个反图即可,得到可以邻座.根据题目中的条件,我们要找奇环,而一个点双连通分量有奇环则整个点双连通分量都可选,因为其他点也会在奇环里.可以假设整个点双连通分量为偶数(奇数没必要讨论了塞),再设与所包含奇环的公共边上的点数为x,分类讨论x为奇数,或偶数.你会发现,整个点双连通分量除了这个奇环剩下的环上的点数一定是奇数,包含了除奇环剩下所有的点.在自己证明的过程中不要忘记奇环上点数本身是奇数的事实.
tarjan求点双连通分量,交叉染色法求奇环,注意一个人虽是奇数但不能开会议.

Tips:
1.一个割点会出现在多个点双连通分量里,tarjan弹栈不要把它弹出了,但是要染色.或者说栈里保存边也可以.
2.交叉染色判奇环的时候注意不要01染色或12染色,还是因为一个割点出现在多个点双联通分量里,这个点很容易在已被01染色后在当前包含它的点双联通分量的交叉染色中产生矛盾.

#include<stdio.h>
#include<cstring>
#include<stack>
#include<algorithm>
using namespace std;
#define clear(a) memset(a,0,sizeof(a))
#define maxn 1010
bool mark[maxn],vis[maxn];
int point,all,indexx,cnt,num,n,m,x,y,ans;
int h[maxn],col[maxn],dfn[maxn],low[maxn],map[maxn][maxn],bcco[maxn];
stack<int> s;
struct edge{
    int v,nxt;
}e[1000010];
inline void add(int u,int v){e[++num].v=v;e[num].nxt=h[u];h[u]=num;}
inline int read(){
    register int x=0,f=1;
    register char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f*=-1;ch=getchar();}
    while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
    return f*x;
}
bool color(int x, int c){
    col[x]=c;
    for(int i=h[x];i;i=e[i].nxt){
        int v=e[i].v;
        if(bcco[v]==cnt){
            if(col[v]==c) return false;
            else if(col[v]!=(c^1)&&color(v,c^1)==false) return false;
        }
    }
    return true;
}

void gotomark(int u){
    bcco[u]=-1,mark[u]=true;
    for(int i=h[u];i;i=e[i].nxt){
        int v=e[i].v;
        if(bcco[v]==cnt) gotomark(v);
    }
    return;
}
void tarjan(int u,int fa){
    dfn[u]=low[u]=++indexx;
    s.push(u),vis[u]=true;
    for(int i=h[u];i;i=e[i].nxt){
        int v=e[i].v;
        if(!vis[v]){
           tarjan(v,u);
           low[u]=min(low[u],low[v]);
           if(low[v]>=dfn[u]){
              cnt++;
              point=-1;
              while(point!=v){
                point=s.top();
                bcco[point]=cnt;
                s.pop();
              }
              bcco[u]=cnt;
              if(!color(u,u<<1)) gotomark(u);
           }
        }
        else if(dfn[v]<dfn[u]&&v!=fa) low[u]=min(low[u],dfn[v]);
    }
}
int main(){
    while(n=read(),m=read(),n||m){
        indexx=0,ans=0,num=0,cnt=0;
        clear(bcco),clear(low),clear(dfn),clear(col),clear(h),clear(map),clear(mark),clear(vis);
        for(register int i=1;i<=m;i++){
            x=read(),y=read();
            map[x][y]=map[y][x]=true;
        }
        for(register int i=1;i<=n;i++)
         for(register int j=i+1;j<=n;j++)
          if(!map[i][j])
           add(i,j),add(j,i);
        for(register int i=1;i<=n;i++) if(!vis[i]) tarjan(i,-1);
        for(register int i=1;i<=n;i++) 
         if(!mark[i]||!h[i])
          ans++;
        printf("%d\n",ans);
    }
}
如何用Python编程实现算术割圆术? 第10章 割圆术 Python编程要点 from … import …语句 math模块的sqrt()函数 round()函数 10.1 图解九章 {:–}觚( gū ):正多边形。“六觚”即正六边形,“十二觚”即正十二边形。 图10-1 六觚、十二觚、二十四觚 提示 图10-1所示由图解九章源码中的“图解割圆术.py”自动绘制而成,我们可运行脚本文件,查看动态的绘制过程。 割六觚以... 阅读详情

相关推荐

HDRP shader 获取阴影(Custom Pass)

Unity:2021.3.0f1 HDRP:12.1.6

LanQ的博客 2097

51nod 1824 染色游戏

Description Data Constraint 11≤nn,mm2202^{20} Solution 首先对rr和bb都作模2操作。 首先有 fx=∑i=0xCixribx−i mod 2f_x=\sum_{i=0}^xC_{x}^i r_i b_{x-i}\ mod \ 2 若fxf_x等于11则说明fxf_x将对答案贡献x2x^2。 接着考虑CixC_{x

XianHaoMing的博客 508

SVDD和OCSVM的比较

OCSVM(one class support vector machine)即单类支持向量机,最先提出的文献为:Estimating the support of a high-dimensional distribution.该模型 将数据样本通过核函数映射到高维特征空间,使其具有更良好的聚集性,在特征空间中求解一个最优超平面实现目标数据与坐标原点的最大分离,如图1: 坐标原...

qq_33880788的博客 1万+

Applese 涂颜色

【题目描述】 精通程序设计的 Applese 叕写了一个游戏。 在这个游戏中,有一个 n 行 m 列的方阵。现在它要为这个方阵涂上黑白两种颜色。规定左右相邻两格的颜色不能相同。请你帮它统计一下有多少种涂色的方法。由于答案很大,你需要将答案对10^9+7 取模。 【输入描述】 仅一行两个正整数 n, m,表示方阵的大小。 1≤n,m≤10^100000 【输出描述】 输出一个正整数...

Alex_McAvoy的博客 394

word 2013 长篇文档排版案例教程

office 2013 制作长文格式模板

1万+

复习单片机:动态数码管(1 数码管介绍+2 74HC245 和 74HC138 芯片介绍+3 硬件设计+4 软件设计+5 实验现象)

复习单片机:动态数码管(1 数码管介绍+2 74HC245 和 74HC138 芯片介绍+3 硬件设计+4 软件设计+5 实验现象)

wo12369874的博客 1699

poj2942圆桌骑士(点双连通分量+二分图染色法判奇圈)

之前一直不明白点双连通分量能用来干嘛,比如边双连通分量可以问加几条边能变成边双连通,这个题目是这样的,每个圆桌会议至少三个骑士参加,因为需要表决意见,所以骑士数目必须是奇数个,直到那些骑士互相憎恨,也就是不能坐在一起的,把能坐在一起的建边,求无法参加任何会议的骑士的个数,重点是任何会议,这点非常关键,这道题之前一直卡在这里,还有就是有的人属于好几种双连通分量,所以全部标记之后再减掉比较好,至于奇数个

银之夏雪的博客 2076

图神经网络实战——利用节点回归预测网络流量

在机器学习中,回归指的是对连续值的预测。通常与分类形成鲜明对比,分类的目标是找到正确的类别(即离散值,而非连续值)。在图数据中,分类和回归分别对应于节点分类和节点回归。在本节中,我们将尝试预测每个节点的连续值,而非分类变量。

盼小辉丶的博客 1万+

[LA3523/uva10195]圆桌骑士 tarjan点双连通分量+奇环定理+二分图判定

[LA3523/uva10195]圆桌骑士 tarjan点双连通分量+奇环定理+二分图判定 1.一个环上的各点必定在同一个点双连通分量内; 2.如果一个点双连通分量是二分图,就不可能有奇环; 最基本的二分图中的一个环: #include&lt;cstdio&gt; #include&lt;cstdlib&gt;...

qq_25768269的博客 311

Python爬虫实战:利用Selenium与Playwright抓取美团外卖数据

在当今大数据时代,网络数据采集已成为商业分析和市场研究的重要手段。本文以美团外卖平台为例,详细介绍如何使用Python最新爬虫技术(Selenium、Playwright)进行数据采集,并探讨相关技术原理、反爬应对策略及数据存储方案。通过5000+字的详细讲解和完整代码示例,帮助读者掌握现代网络爬虫开发的核心技能。本文详细介绍了使用Python最新爬虫技术采集美团外卖数据的完整流程,涵盖了从环境配置、页面分析到数据存储的全链路解决方案。

2201_76125261的博客 2550

RK3588 Android12 添加HDMI和喇叭声音通道切换选项

rk3588 android12系统默认接hdmi out时,声音会切换到hdmi out输出,主板声卡喇叭输出会没有声音输出。现在添加一个选项设置hdmi out时,声音可以保持主板声卡喇叭输出。

Android系统开发笔记 4162

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

割点 在无向连通图G上进行如下定义: • 割点:若删掉某点P后,G分裂为两个或两个以上的子图,则称P为G的割点。 • 割点集合:在无向连通图G中,如果有一个顶点集合,删除这个顶点集合以及与该点集中的顶点相关联的边以后,原图分成多于一个连通块,则称这个点集为G的割点集合。• 点连通度:最小割点集合的大小称为无向图G的点连通度 割边 类似地,在无向连通图G上进行如下定义:• 桥(割边)...

weixin_30622181的博客 169

windows一键安装部署wvp-GB28181-pro视频监控平台

我们可以看到redis、mysql、zlm和wvp都正常运行了。该ip需要修改为wvp服务安装的 服务器的IP。默认用户名和密码分别为admin和admin。

zengliguang的专栏 5746

poj2942 圆桌骑士(点双连通分量+二分图染色法判奇环)

题意:一些骑士,他们有些人之间有矛盾,现在要求选出一些骑士围成一圈,圈要满足如下条件:1.人数大于1。2.总人数为奇数。3.有仇恨的骑士不能挨着坐。问有几个骑士不能和任何人形成任何的圆圈。 分析:图论综合题,涉及补图、(点)双连通分量、奇环、二分图、交叉染色法、Tarjan算法,详见《算法竞赛进阶指南》P407-408。 代码: #include<iostream> #incl...

常胜将军的博客 349

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

POJ 2942(点双连通分量+无向图判奇环)

POJ 2942(点双连通分量+无向图判奇环) 题目链接:传送门 题意: 来自kuangbin模板 POJ 2942 Knights of the Round Table 亚瑟王要在圆桌上召开骑士会议,为了不引发骑士之间的冲突, 并且能够让会议的议题有令人满意的结果,每次开会前都必须对出席会议的骑士有如下要求: 1、 相互憎恨的两个骑士不能坐在直接相邻的2个位置; 2、 出席会议的骑士数必...

Dch19990825的博客 452

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【POJ 2942】Knights of the Round Table(点双连通分量,二分图染色)

圆桌会议必须满足:奇数个人参与,相邻的不能是敌人(敌人关系是无向边)。 求无论如何都不能参加会议的骑士个数。只需求哪些骑士是可以参加的。 我们求原图的补图:只要不是敌人的两个人就连边。 在补图的一个奇圈里(由奇数个点组成的环)每个点都是可以参加的。而一个奇圈一定在点双连通分量里,所以我们把原图的每个点双连通分量找出来,然后判断是否有奇圈。用到了几个引理: 非二分图至少有一个奇...

dingguayi7025的博客 176

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

POJ-2942 Knights of the Round Table(补图+点双连通分量+奇圈+染色判断二分图+结论)

链接:http://poj.org/problem?id=2942 题意:多组样例。亚瑟王要召唤骑士在圆桌会议。n个骑士,m个憎恨关系,一个骑士不能和他憎恨的骑士坐在一块。亚瑟王要求来开会的骑士的个数必须是奇数,在此条件下,求开除最少的骑士。(注意一个骑士不能开会,至少三个骑士才能开会。) 思路:我们建补图,这样有边的人都能做一块,然后再求点双,求出点双后,再判断能不能形成奇圈。这里有现成的结...

birdmanqin的博客 322

poj 2942

这道题是一道关于点双连通分量的题,buguo

水题收集者 732

POJ - 2942 Knights of the Round Table 二分图染色 点双连通分量 tarjan模板

题意:亚瑟王要在圆桌上召开骑士会议,为了不引发骑士之间的冲突,  并且能够让会议的议题有令人满意的结果,每次开会前都必须对出席会议的骑士有如下要求:  1、 相互憎恨的两个骑士不能坐在直接相邻的2个位置; 2、 出席会议的骑士数必须是奇数,这是为了让投票表决议题时都能有结果。 注意:1、所给出的憎恨关系一定是双向的,不存在单向憎恨关系。         2、由于是圆桌会议,则每个出席的骑士身边必定...

陌离将离 294

POJ - 2942 Knights of the Round Table(点双缩点+二分图判定)

题目链接:点击查看 题目大意:国王要在圆桌上召开骑士会议,但是有若干对骑士之间互相憎恨。出于各种各样奇怪的原因,每次开会都必须有以下要求: 相互憎恨的两个骑士不能坐在相邻的两个位置 为了让投票表决议题时都能有结果(不平票),出席会议的骑士数必须是奇数 如果有某个骑士无法出席任何会议,则国王会为了世界和平把他踢出骑士团。现在给定n个骑士和m个憎恨关系,求出至少需要踢掉多少个骑士 题目分析:很...

Falcon的博客 469

poj 2942 Knights of the Round Table(点双连通分量)

题目链接:http://poj.org/problem?id=2942 转载自:https://blog.youkuaiyun.com/lyy289065406/article/details/6756821 大致题意: 亚瑟王要在圆桌上召开骑士会议,为了不引发骑士之间的冲突,并且能够让会议的议题有令人满意的结果,每次开会前都必须对出席会议的骑士有如下要求: 1、 相互憎恨的两...

agyohust791263的博客 272

POJ - 2942(点双连通分量,二分图判奇环)

Knights of the Round Table 首先理解题意很重要。。。题意看得我云里雾里,意思是有多个会议,每个会议都要满足要求,如果一个人他是什么会议都参加不了,那他就要被踢出了。 关系不好的不坐一起,那么反向建边,把那些能坐一起的建一条边,然后找点双连通分量。 在一个点双连通分量中,如果存在奇环,如果有点x在这个环外,那么一定存在x与这个奇环上的点形成简单环,因为奇环两个点间一定存在一奇一偶,所以类似缩点后,就用染色法判断存在奇环没,类似判定二分图,有奇环就不是二分图。 tarjan这种多组输入

weixin_45714726的博客 409

poj 2942 点双连通分量

1 /* 2 题意:有n个骑士,某些其实之间hate each other,互相hate的其实不能相邻而坐,然后会开多次圆桌会议, 3 每次从n个骑士中抽出3个或以上的奇数个骑士参加会议并且围着圆桌而坐,某些人每次会议都无法参加,这样 4 找出这些人的数目。 5 6 题解:点双连通(代码参考:http://blog.youkuaiyun.com/tsaid/a...

dianxie7120的博客 136

poj 2942-圆桌骑士(点双连通分量+二分图)

题目:http://poj.org/problem?id=2942 题意: 一群骑士,某些骑士之间互相憎恨,如果在一起容易发生争斗事件,因此他们只有满足一定条件才能参加圆桌会议:1.圆桌边上任意相邻的两个骑士不能互相憎恨;2。同一个圆桌边上的骑士数量必须是奇数; 分析: 这题训练指南上有详解,分析是copy自JosiahChiu的,书上写的挺详细的。我主要是贴一下作为模板~~ 1 骑

HARD_UNDERSTAND 692

「POJ2942」 Knights of the Round Table(二分图 交叉染色+ 点双连通分量)

题干:   亚瑟王要在圆桌上召开骑士会议,为了不引发骑士之间的冲突,并且能够让会议的议题有令人满意的结果,每次开会前都必须对出席会议的骑士有如下要求:  1、相互憎恨的两个骑士不能坐在直接相邻的2个位置;  2、出席会议的骑士数必须是奇数,这是为了让投票表决议题时都能有结果。  如果出现有某些骑士无法出席所有会议(例如这个骑士憎恨所有的其他骑士),则亚瑟王为了世界和平会强制把他剔除出骑...

anchengao1503的博客 151

POJ 2942 Knights of the Round Table 补图+点双连通分量+染色法判二分图

http://poj.org/problem?id=2942 Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress, and drinking with the other knights are fun things to do. Therefore...

xiji333的博客 265
上一篇: bzoj3732 Network 最小生成树+LCA+树上倍增
下一篇: UVA1391【LA3713】 经典2-SAT
MaxMercer
博客等级 码龄10年 55粉丝 261原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值