Time limit 1000 ms

Memory limit 262144 kB

这题是一场cf里,div1的第三题,div2的第5题

中文题意

给一张无向图,没说连通性,要你选出一个大小为n的匹配,或者大小为n的独立集。换句话说,要你选出n条互相没有公共点的边,要是没有就选出n个互相没有直接相邻的点。直接相邻:被一条给定边连接。

解题思路

官方题解

Let's try to take edges to matching greedily in some order. If we can add an edge to the matching (both endpoints are not covered), then we take it. It is easy to see that all vertices not covered by the matching form an independent set — otherwise we would add an edge to the matching. Either matching or independent set has size at least \(n\). Complexity — \(O(n+m)\).

我的想法

一开始看见觉得很玄学啊,但仔细一想还真是那么回事。是这么选:给了\(3n\)个点嘛,对于输入的每条边,如果两个端点都没被选择过,就把这条边附带这两个点选上,并把两个端点标记为用过。如果输入完,选择了足够数量的边(大于等于n),那就输出这些边就好。

如果边没选够,那么说明存在多于\(n\)个未使用的点(选一条边用掉2个点,而总共\(3n\)个点),这些点当中的每一个,它的邻居中已经没有未被使用的了。

因为如果一个点未被使用,且它的邻居也未被使用,那么之前选边的时候这条边就被选了,它也就被使用了,它和它的邻居就会被标记上被使用过。换句话说,这个未使用的点和其他未使用的点之间没有边相连,被孤立了。其他未使用的点也同理。

这剩下的至少\(n\)个点就是题目要的独立集啊。于是就输出这些点。

另外,如果选中的边数量正好等于\(n\),说明对应独立集的大小也是\(n\),这时候按题意随便输出一种就好。

cf上给这题打的构造、贪心、图论、排序的标签(排序?)。确实不需要排序吧……还是因为官方题解的第一句话——

Let's try to take edges to matching greedily in some order

然后有order这个词,就给它打上排序的标签?(突然杠精)

源代码

#include<stdio.h>
#include<string.h> int T;
int n,m;
bool used[300010];//用于标记点是否被使用
int e[500010],cnt;//用于记录选中的边的编号和数量,用于输出
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
memset(used,0,(n+2)*3);
cnt=1;
for(int i=1,u,v;i<=m;i++)
{
scanf("%d%d",&u,&v);
if(!used[u]&&!used[v])
{
used[u]=used[v]=1;
e[cnt++]=i;
}
}
if(cnt>n)
{
puts("Matching");
for(int i=1;i<=n;i++)
{
printf("%d ",e[i]);
}
}
else
{
int num=0;
puts("IndSet");
for(int i=1;i<=3*n&&num<n;i++)//写的时候脑袋不清晰,WA了好几次,这个循环条件改了好几次
{
if(used[i]) continue;
printf("%d ",i);
num++;
}
}
puts("");
}
return 0;
}

CodeForces 1198C 1199E Matching vs Independent Set的更多相关文章

  1. Codeforces - 1198C - Matching vs Independent Set - 贪心

    https://codeforces.com/contest/1198/problem/C 要选取一个大小大于等于n的匹配或者选取一个大小大于等于n的独立集. 考虑不断加入匹配集,最终加入了x条边. ...

  2. [codeforces 508E]Maximum Matching

    题目:Maximum Matching 传送门:http://codeforces.com/contest/1038/problem/E 分析: 一个块拥有{color1,val,color2},两个 ...

  3. [Codeforces Round #508 (Div. 2)][Codeforces 1038E. Maximum Matching]

    前几天给舍友讲这题的时候感觉挺有意思的,就贴上来吧... 题目链接:1038E - Maximum Matching 题目大意:有\(n\)个棒子,每个条两端有颜色\(c1,c2\)以及他的价值\(v ...

  4. CF Round #576 (Div. 2) Matching vs Independent Set

    链接:Click here 题目意思:给你一个图,有3n个点,m条边,求是否有n条匹配边或n个独立点,其中匹配为没有公共点,独立为不相连 Solution: 考虑每个点对于第一种情况,最多只能贡献一次 ...

  5. Codeforces 1038E Maximum Matching

    可能写了个假算法 假设定义:含有一个欧拉路的图为类欧拉图 欧拉路的定义:一个无向连通图中,存在一条路径对所有边都遍历且仅遍历一次:判断方法:该连通图中度为奇数的点的个数不能超过2,即为0或者2 题目解 ...

  6. 【CodeForces】CodeForcesRound576 Div1 解题报告

    点此进入比赛 \(A\):MP3(点此看题面) 大致题意: 让你选择一个值域区间\([L,R]\),使得序列中满足\(L\le a_i\le R\)的数的种类数不超过\(2^{\lfloor\frac ...

  7. Codeforces Round #576 (Div. 1)

    Preface 闲来无事打打CF,就近找了场Div1打打 这场感觉偏简单,比赛时艹穿的人都不少,也没有3000+的题 两三个小时就搞完了吧(F用随机水过去了) A. MP3 题意不好理解,没用翻译看了 ...

  8. Codeforces Round #576 (Div. 1) 简要题解 (CDEF)

    1198 C Matching vs Independent Set 大意: 给定$3n$个点的无向图, 求构造$n$条边的匹配, 或$n$个点的独立集. 假设已经构造出$x$条边的匹配, 那么剩余$ ...

  9. Codeforces Round #576 (Div. 2) 题解

    比赛链接:https://codeforc.es/contest/1199 A. City Day 题意:给出一个数列,和俩个整数\(x,y\),要求找到序号最靠前的数字\(d\),使得\(d\)满足 ...

随机推荐

  1. JDK8新特性之一Lambda

    JDK8的新特性之一Lambda能将函数作为方法里面的参数使用. /** * JDK8新特性Lambda */ public class Test { public static void main( ...

  2. ionic3构建过程中遇到的找不到AndroidManifest.xml的问题

    问题如下: Failed to install 'ionic-plugin-keyboard': Error: ENOENT: no such file or directory, open '/Us ...

  3. js函数的定义和调用

    函数的定义 函数使用function 声明,后跟一组参数以及函数体,语法如下: function functionName([age0,age1,......argn]){ statements } ...

  4. [19/09/18-星期三] Python中的序列

    一. # 第四章 序列(视频58-76) ## 列表(list) - 列表是Python中的一个对象 - 对象(object)就是内存中专门用来存储数据的一块区域 - 之前我们学习的对象,像数值,它只 ...

  5. iScroll使用参考

    分享是传播.学习知识最好的方法 以下这篇文章是iScroll.js官网的中文翻译,尽管自己英文不好,但觉得原作者们翻译的这个资料还是可以的,基本用法介绍清楚了.如果你英文比较好的话,可以看看官网的资料 ...

  6. Thinkphp设置PC和手机端模板

    <?php // 判断手机端 function ismobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X ...

  7. IntelliJ IDEA中创建Web聚合项目(Maven多模块项目)(转载)

    创建parent项目 1.打开IDEA,注意这里不要勾选模板,用模板创建过maven项目的小伙伴都知道模板创建项目非常慢,所以这里不要选模板,需要的文件夹我们后面自己来创建就可以了.所以这个页面直接点 ...

  8. Vue:Elementui中的Tag与页面其它元素相互交互的两三事

    前言 公司系统在用elementui做后台开发,不免遇到一些需要自己去根据原有的功能上,加一些交互的功能.今天来介绍下我在用elementUi里的Tag标签与多选框交互的过程,东西听上去很简单,但就是 ...

  9. python学习第五十二天logging模块的使用

    很多程序都有记录日志的需求,并且日志包含的信息即有正常的程序访问日志,还可能有错误,警告等信息输出,python的 logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...

  10. HTML-图片和多媒体

    1.图片和多媒体 (1)    图片:img元素 src 属性:图片路径: alt 属性:图片无法显示时使用的替代文字: title:鼠标悬停时显示的文字 : <img src="图片 ...