[Luogu3852][TJOI2007]小朋友
题意
求弦图的最大独立集。
sol
按照完美消除序列一个个贪心选即可。
code
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
int gi()
{
int x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=0,ch=getchar();
while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return w?x:-x;
}
const int N = 1e5+5;
int n,m,to[N],nxt[N],head[N],cnt,vis[N],seq[N],label[N],best,ans;
vector<int>v[N];
void link(int u,int v){to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;}
int main()
{
n=gi();m=gi();
for (int i=1;i<=m;++i)
{
int u=gi(),v=gi();
link(u,v);link(v,u);
}
for (int i=1;i<=n;++i) v[0].push_back(i);
for (int i=1,now;i<=n;++i)
{
bool fg=0;
while (!fg)
{
for (int j=v[best].size()-1;j>=0;--j)
if (!vis[v[best][j]]) {fg=1;now=v[best][j];break;}
else v[best].pop_back();
if (!fg) --best;
}
seq[i]=now;vis[now]=1;
for (int e=head[now];e;e=nxt[e])
if (!vis[to[e]])
{
v[++label[to[e]]].push_back(to[e]);
best=max(best,label[to[e]]);
}
}
memset(vis,0,sizeof(vis));
for (int i=n;i;--i)
if (!vis[seq[i]])
{
++ans;vis[seq[i]]=1;
for (int e=head[seq[i]];e;e=nxt[e])
vis[to[e]]=1;
}
printf("%d\n",ans);
return 0;
}
[Luogu3852][TJOI2007]小朋友的更多相关文章
- [TJOI2007]小朋友
题面 Luogu Sol 弦图最大独立集 做法见上篇博客 # include <bits/stdc++.h> # define RG register # define IL inline ...
- NOIP2013pj小朋友的数字[DP 最大子段和]
描述 有 n 个小朋友排成一列.每个小朋友手上都有一个数字,这个数字可正可负.规定每个小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之和的最大值.作为这些 ...
- BZOJ3625: [Codeforces Round #250]小朋友和二叉树
Description 我们的小朋友很喜欢计算机科学,而且尤其喜欢二叉树.考虑一个含有n个互异正整数的序列c[1],c[2],...,c[n].如果一棵带点权的有根二叉树满足其所有顶点的权值都在集合{ ...
- Android_就像小朋友“搭积木”一样。
就像小朋友“搭积木”一样.感觉这句话很有意思.完整的话是这样的: Android提供了大量功能丰富的UI组件,开发者只要按一定规律把这些UI组件组合起来 --就像小朋友“搭积木”一样,把这些UI组件搭 ...
- 【bzoj3625】【xsy1729】小朋友和二叉树
[bzoj3625]小朋友与二叉树 题意 我们的小朋友很喜欢计算机科学,而且尤其喜欢二叉树. 考虑一个含有n个互异正整数的序列c[1],c[2],...,c[n].如果一棵带点权的有根二叉树满足其所有 ...
- UESTC_秋实大哥与小朋友 2015 UESTC Training for Data Structures<Problem A>
A - 秋实大哥与小朋友 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Sub ...
- for语句之侦查队挑选人、猴子吃桃、5个小朋友算年龄、1 () 2 () 3 ()4 = 4;问括号里我要填 (- 或 +)问题
1.某侦察队接到一项紧急任务,要求在A.B.C.D.E.F六个队员中尽可能多地挑若干人,但有以下限制条件:侦察兵A和B两人中至少去一人: a+b>=1(由于每个队员有两种状态:去与不去,假设不去 ...
- 教小朋友学Linux
Linux最基础之<小朋友也能学会Linux>... 1.Linux 知识积累: Linux 英文解释为 Linux is not Unix.学习Linux必须要熟练使用的操作系统是Cen ...
- m个小朋友手拉手站成一个圈,从第k个小朋友开始报数,报到n的那个小朋友退到圈外,然后他的下一位重新报“1”。这样继续下去,直到只剩下一个小朋友,求解这个小朋友原来站什么地方。
约瑟夫环问题. package pack; import java.util.*; public class demo_2 { static int a[]; public static void m ...
随机推荐
- C# Xml Linq XDocument 基本操作 -- 重新学习
person.xml <?xml version="1.0" encoding="utf-8"?> <MyP> <P1> & ...
- $SVN代码版本管理工具的使用
SVN是一种代码版本管理工具,具有可视化的操作界面,使用简便,和git的功能类似.下面总结一下SVN的基本用法: 1.安装SVN软件,和安装一般的软件的步骤差不多,这里使用的版本是TortoiseSV ...
- 20165101刘天野 2017-2018-2 《Java程序设计》第4周学习总结
#20165101刘天野 2017-2018-2 <Java程序设计>第4周学习总结 教材学习内容总结 第五章:子类与继承 面向对象程序设计语言有三大特性:封装.继承和多态性.继承是面向对 ...
- char,uchar,0xff
如果:char test = 0xFF: 此时:test != 0xFF://因为test为char类型,0xFF为int,所以编译器会将test转为int(-1),所以不等于 如果:uchar te ...
- keepalived检测脚本及注意事项
keepalived检测脚本的作用及注意事项: 默认每隔3秒钟执行一次检测脚本,检查nginx服务是否启动,如果没启动就把nginx服务启动起来,如果启动不成功,就把keepalived服务down掉 ...
- hibernate集合的加载策略
在集合方配置lazy和fetch的方式,默认的是lazy为true,fetch为select,lazy有true,extra和false,true和extra都是懒加载,只是extra比true更懒, ...
- sql server deadlock problem
https://www.red-gate.com/simple-talk/sql/learn-sql-server/how-to-track-down-deadlocks-using-sql-serv ...
- C#反射第二天
原文:http://blog.csdn.net/zhaoguiqun/article/details/5954720 1.什么是反射Reflection,中文翻译为 反射. 这是.Net中获取 ...
- 研究Mac OS中Migration Assistant工具
一.对Migration Assistant工具的理解: 1.最精辟的定义是:Move your content to a new Mac. 如果想将windows上的数据迁移到mac上?使用工具Wi ...
- WINSOCK 传送文件
SERVER: // send_server.cpp : Defines the entry point for the console application. // #include " ...