题意

\(n(n < 1000000)\)个人,每个人\(i\)指向一个人\(p_i\),如果轮到\(i\)了且他没死,则他会将\(p_i\)打死。求一种顺序,问死的人最少和最多的数目。

分析

贪心+乱搞

题解

最多剩下的:

链:(n+1)/2

环:n/2

环套内向树:维护没被杀的点,即用队列维护入度为0的点,然后环变成了一堆链,再用上面的结论即可。

最少剩下的:

链:1

环:1

环套内向树:入度为0的个数

#include <bits/stdc++.h>
using namespace std;
inline int getint() {
int x=0, c=getchar();
for(; c<48||c>57; c=getchar());
for(; c>47&&c<58; x=x*10+c-48, c=getchar());
return x;
}
const int N=1000005;
int to[N], in[N], q[N];
bool vis[N], del[N];
int main() {
int n=getint(), ans1=0, ans2=0;
for(int i=1; i<=n; ++i) {
++in[to[i]=getint()];
}
int *fr=q, *ta=q;
for(int i=1; i<=n; ++i) {
if(in[i]==0) {
++ans1;
for(int j=i; !vis[j]; vis[j]=1, j=to[j]);
*ta++=i;
}
}
for(int i=1; i<=n; ++i) {
if(!vis[i]) {
int len=0;
for(int j=i; !vis[j]; vis[j]=1, j=to[j], ++len);
ans1+=len>1;
}
}
memset(vis, 0, sizeof(bool)*(n+1));
for(; fr!=ta; ) {
int x=*fr++, y=to[x];
vis[x]=1;
if(!del[x]) {
++ans2;
del[y]=1;
}
if(!--in[y]) {
*ta++=y;
}
}
for(int i=1; i<=n; ++i) {
if(!vis[i] && del[i]) {
int len=0;
for(int j=i; !vis[j]; vis[j]=1, j=to[j]) {
if(!del[j]) {
++len;
}
else {
ans2+=(len+1)>>1;
len=0;
}
}
ans2+=(len+1)>>1;
}
}
for(int i=1; i<=n; ++i) {
if(!vis[i]) {
int len=0;
for(int j=i; !vis[j]; vis[j]=1, j=to[j], ++len);
ans2+=len>>1;
}
}
printf("%d %d\n", n-ans2, n-ans1);
return 0;
}

最新文章

  1. 域名解析服务查询工具dnstracer
  2. 一个 div 实现扇形图(锥形渐变)
  3. asp.net链接数据库问题,设置收藏本站,设置主页
  4. [Maven]Eclipse插件之Maven配置及问题解析.
  5. C 运算符优先级
  6. 【转载】cocos2d-x教程 Mac系统下搭建Lua的编码环境
  7. UVA 10714 Ants 蚂蚁 贪心+模拟 水题
  8. Win10关闭某程序的通知的方法
  9. Compiler Error: Function call with parameters that may be unsafe
  10. nodeJS网络操作
  11. ie8兼容视频播放的探索(探索过程稍微有点长,时间紧迫和耐心稍微差一点点的小伙伴直接往下拉)
  12. TUM数据集rgbd_benchmark工具的使用方法
  13. jMeter_响应数据乱码
  14. C++中 top()与pop()
  15. Java Listener中Spring接口注入的使用
  16. Java static和final
  17. ExtJS的数据模型
  18. File System Object(FSO对象)A
  19. css修改input自动提示的黄色背景
  20. 安装及运行 RabbitMQ 服务器 (linux) 失败! 安装erlang 失败,无法继续

热门文章

  1. poj 3321:Apple Tree(树状数组,提高题)
  2. poj 1003:Hangover(水题,数学模拟)
  3. 一个通过网络转换Ico到Png图片的小小程序(Ico2Png)
  4. scala的tcp通信
  5. .NET NLog 详解(一)
  6. 使用PHP获取时间今天 明天 昨天 时间戳的详解
  7. WPF QuickStart系列之样式和模板(Style and Template)
  8. 25条提高Visual Studio编码和调试效率的技巧
  9. matlab练习程序(Moravec算子)
  10. loj 1037(状压dp)