暑假集训单切赛第二场 UVA 10982 Troublemakers
题意:将点放在两个集合,同一个集合的边保留,不同集合的边删去,使得边至少减少一半。
输出任何一种方案即可。如果不能,输出Impossible
思路:设如果两个人为一对捣蛋鬼,则two[i][j]=two[j][i]=1,即用边表示关系
刚开始设集合为A、B,为空集。然后每次取一个点,往集合里加,加入到哪个集合使得增加的边最少就加入到那个集合中。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm> using namespace std; int two[][];//two[i][j]=1表示i和j是一对捣蛋鬼
int n,m;
int vis[];//vis[i]=1表示i放入集合A中,=2表示i放在集合B中
int group[];//group[1]统计A中的点的个数,group[2]统计B中的点的个数。 int main() {
int t,a,b;
scanf("%d",&t);
for(int q=; q<=t; q++) {
memset(vis,,sizeof(vis));
memset(group,,sizeof(group));
memset(two,,sizeof(two));
scanf("%d%d",&n,&m);
for(int i=; i<=m; i++) {
scanf("%d%d",&a,&b);
two[a][b]=two[b][a]=;
}
int num=;
//每次取一个点插入到集合A或B中
for(int i=; i<=n; i++) {
int tmp1=,tmp2=; //tmp1表示将点i放入到集合A中将产生多少条边,tmp2表示将点i放入到集合B中将产生多少条边
for(int j=; j<=n; j++) {
if(vis[j]== && two[i][j]) {
tmp1++;
}
if(vis[j]== && two[i][j]) {
tmp2++;
}
}
//放入哪个集合增加的边少,就将点i放入到哪个集合中
if(tmp1>tmp2) {
vis[i]=;
group[]++;
num+=tmp2;
} else {
vis[i]=;
group[]++;
num+=tmp1;
}
}
if(num<=m/) {
printf("Case #%d: %d\n",q,group[]);
for(int i=; i<=n; i++) {
if(vis[i]==)
printf("%d ",i);
}
printf("\n");
} else {
printf("Case #%d: Impossible.\n",q);
printf("\n");
}
}
return ;
}
暑假集训单切赛第二场 UVA 10982 Troublemakers的更多相关文章
- 暑假集训单切赛第二场 UVA 11988 Broken Keyboard (a.k.a. Beiju Text)(字符串处理)
一开始不懂啊,什么Home键,什么End键,还以为相当于括号,[]里的东西先打印出来呢.后来果断百度了一下. 悲催啊... 题意:给定一个字符串,内部含有'['和']'光标转移指令,'['代表光标移向 ...
- 暑假集训单切赛第一场 UVA 1737 Mnemonics and Palindromes 3
题意:求由a,b,c三个字母组成的长度为n的字符串,其任意连续的至少长度大于等于2的子字符串都不是回文,问这个字符串有多少种?并字典序输出 如果所有种类的字符串总长度大于100000个字符,就输出TO ...
- 暑假集训单切赛第一场 CF 266E More Queries to Array(线段树+二项式展开式)
比赛时,第二题就是做的这个,当时果断没仔细考虑,直接用线段树暴力求.结果易想而知,超时了. 比赛后搜了搜题解,恍然大悟. 思路:显然用线段树,但是由于每次查询都会有变,所以不可能存储题目中的式子. ...
- 暑假集训单切赛第一场 POJ 2309 BST(找规律的题)
题意:给出一棵二分搜索树,再给一个节点编号n,求以这个节点为根节点的子树叶子节点的最大值与最小值. 首先求n所在的层数,他的层数就是他的因子中2的个数(规律). n的左右各有num=2^i-1个数.最 ...
- 暑假集训单切赛第一场 CF 191A Dynasty Puzzles
题意不说了,看原题吧,思路见代码: #include <iostream> #include <stdio.h> #include <string.h> #incl ...
- Contest1592 - 2018-2019赛季多校联合新生训练赛第二场(部分题解)
Contest1592 - 2018-2019赛季多校联合新生训练赛第二场 D 10248 修建高楼(模拟优化) H 10252 组装玩具(贪心+二分) D 传送门 题干 题目描述 C 市有一条东西走 ...
- NOI.AC NOIP模拟赛 第二场 补记
NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...
- 可持久化线段树的学习(区间第k大和查询历史版本的数据)(杭电多校赛第二场1011)
以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之 ...
- SCNU省选校赛第二场B题题解
今晚的校赛又告一段落啦,终于"开斋"了! AC了两题,还算是满意的,英语还是硬伤. 来看题目吧! B. Array time limit per test 2 seconds me ...
随机推荐
- java检测端口号是否配占用
java检测端口号是否被占用的工具类: package com.frank.util; import java.io.IOException; import java.net.InetAd ...
- Java 字节流实现文件读写操作(InputStream-OutputStream)
Java 字节流实现文件读写操作(InputStream-OutputStream) 备注:字节流比字符流底层,但是效率底下. 字符流地址:http://pengyan5945.iteye.com/b ...
- Codevs 2898 卢斯的进位制
时间限制: 1 s 空间限制: 32000 KB 题目等级 : 青铜 Bronze 题目描述 Description 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母 ...
- poj 2010 Moo University - Financial Aid
Moo Univ ...
- how to debug thread cpu 100%
when we write a program, cpu and memory usages are very important to indicate the stability of the p ...
- 处理jquery版本之间冲突
处理jquery版本之间冲突 前端开发们都知道jquery版本有好多,之间冲突很纠结.比如我刚来这公司的时候,后端的哥们用的是jQuery 1.3.2,我了个去,那哥们好久没更新了.我写的效果插件都是 ...
- Xcode中为代码添加特殊标记
有时候,我们需要在代码中搜索特殊的符号或者代码段,根据符号或使用搜索功能导航代码段效率并不算高.为了使用普通的英语标识重要的代码片段,可在代码中插入特殊格式的注释.这些注释不会在应用程序中添加任何特殊 ...
- js 倒计时 倒计时60秒
<input type="button" id="btn" value="免费获取验证码" onclick="settime ...
- Windows7系统禁用USB和启用USB方法
被迫装了XX软件之后,无线网络和USB都被禁用了,XX软件还不能被卸载.只能用PE进去时候把XX软件安装目录进行删除,但是删除之后还是不能识别U盘,从网上找到办法一看是注册表的项被修改了. 注册表项为 ...
- linux下配置tomcat7 + solr4.9(续)--- 多核索引的配置
在上一篇文章中(详见http://www.cnblogs.com/bxljoy/p/3850263.html),我们已经介绍了tomcat+solr的索引服务器的配置,但是文中创建的服务器只能支持存储 ...