【BZOJ】1124: [POI2008]枪战Maf
2024-10-19 03:26:11
题意
\(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;
}
最新文章
- 域名解析服务查询工具dnstracer
- 一个 div 实现扇形图(锥形渐变)
- asp.net链接数据库问题,设置收藏本站,设置主页
- [Maven]Eclipse插件之Maven配置及问题解析.
- C 运算符优先级
- 【转载】cocos2d-x教程 Mac系统下搭建Lua的编码环境
- UVA 10714 Ants 蚂蚁 贪心+模拟 水题
- Win10关闭某程序的通知的方法
- Compiler Error: Function call with parameters that may be unsafe
- nodeJS网络操作
- ie8兼容视频播放的探索(探索过程稍微有点长,时间紧迫和耐心稍微差一点点的小伙伴直接往下拉)
- TUM数据集rgbd_benchmark工具的使用方法
- jMeter_响应数据乱码
- C++中 top()与pop()
- Java Listener中Spring接口注入的使用
- Java static和final
- ExtJS的数据模型
- File System Object(FSO对象)A
- css修改input自动提示的黄色背景
- 安装及运行 RabbitMQ 服务器 (linux) 失败! 安装erlang 失败,无法继续
热门文章
- poj 3321:Apple Tree(树状数组,提高题)
- poj 1003:Hangover(水题,数学模拟)
- 一个通过网络转换Ico到Png图片的小小程序(Ico2Png)
- scala的tcp通信
- .NET NLog 详解(一)
- 使用PHP获取时间今天 明天 昨天 时间戳的详解
- WPF QuickStart系列之样式和模板(Style and Template)
- 25条提高Visual Studio编码和调试效率的技巧
- matlab练习程序(Moravec算子)
- loj 1037(状压dp)