bzoj 1124 [POI2008]枪战Maf 贪心
[POI2008]枪战Maf
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 741 Solved: 295
[Submit][Status][Discuss]
Description
有n个人,每个人手里有一把手枪。一开始所有人都选定一个人瞄准(有可能瞄准自己)。然后他们按某个顺序开枪,且任意时刻只有一个人开枪。因此,对于不同的开枪顺序,最后死的人也不同。
Input
输入n人数<1000000 每个人的aim
Output
你要求最后死亡数目的最小和最大可能
Sample Input
2 3 2 2 6 7 8 5
Sample Output
HINT
1 #include <queue> 2 #include <cstdio> 3 #include <cstring> 4 #include <iostream> 5 #include <algorithm> 6 #define N 1000100 7 using namespace std; 8 int n,cnt; 9 int a[N]; 10 int du[N]; 11 int head[N]; 12 int vis[N]; 13 int v[N]; 14 int fir[N]; 15 struct node 16 { 17 int from,to,next; 18 }edge[N<<1]; 19 int belong[N]; 20 int cnt_du[N]; 21 int siz[N]; 22 int tot; 23 void init() 24 { 25 memset(head,-1,sizeof(head)); 26 cnt=1; 27 } 28 void edgeadd(int from,int to) 29 { 30 edge[cnt].from=from,edge[cnt].to=to,edge[cnt].next=head[from]; 31 head[from]=cnt++; 32 } 33 void dfs(int now,int ff) 34 { 35 vis[now]=1,belong[now]=tot,siz[tot]++; 36 for(int i=head[now];i!=-1;i=edge[i].next) 37 { 38 int to=edge[i].to; 39 if(to==now||to==ff||vis[to])continue; 40 dfs(to,now); 41 } 42 } 43 int check(int now,int num) 44 { 45 v[now]=1; 46 int t=now,cntt=1; 47 while(!v[a[t]]) 48 { 49 v[a[t]]=1; 50 t=a[t]; 51 cntt++; 52 } 53 t=a[t]; 54 if(t==now&&cntt==num)return 1; 55 return 0; 56 } 57 int main() 58 { 59 init(); 60 scanf("%d",&n); 61 for(int i=1;i<=n;i++) 62 { 63 scanf("%d",&a[i]); 64 du[a[i]]++; 65 edgeadd(i,a[i]); 66 edgeadd(a[i],i); 67 } 68 for(int i=1;i<=n;i++) 69 { 70 if(!vis[i]) 71 tot++,dfs(i,0),fir[tot]=i; 72 } 73 for(int i=1;i<=n;i++) 74 { 75 if(du[i]==0)cnt_du[belong[i]]++; 76 } 77 int ansma=0,ansmi=0; 78 for(int i=1;i<=tot;i++) 79 { 80 if(siz[i]==1)ansma++; 81 if(check(fir[i],siz[i])) 82 ansma+=siz[i]-1; 83 else ansma+=siz[i]-cnt_du[i]; 84 } 85 memset(v,0,sizeof(v)); 86 memset(vis,0,sizeof(vis)); 87 queue<int>q; 88 for(int i=1;i<=n;i++) 89 { 90 if(!du[i]) 91 q.push(i); 92 } 93 while(!q.empty()) 94 { 95 int u=q.front(); 96 q.pop(); 97 v[u]=1; 98 if(!vis[a[u]]) 99 { 100 v[a[u]]=vis[a[u]]=1,ansmi++; 101 du[a[a[u]]]--; 102 if(!du[a[a[u]]]) 103 q.push(a[a[u]]); 104 } 105 } 106 for(int i=1;i<=n;i++) 107 { 108 if(!v[i]) 109 { 110 int t=i,cnt=0; 111 while(!v[t]) 112 { 113 v[t]=1; 114 cnt++; 115 t=a[t]; 116 } 117 ansmi+=(cnt+1)/2; 118 } 119 } 120 printf("%d %d\n",ansmi,ansma); 121 }
转载于:https://www.cnblogs.com/fengzhiyuan/p/8682172.html
bzoj 1124 [POI2008]枪战Maf 贪心相关推荐
- BZOJ 1124 [POI2008]枪战Maf 贪心+乱搞
题意:略. 方法:贪心+乱搞. 解析: 今天做的题里面最难的了- 分连通块进行考虑. 一个连通块最多死多少呢? 一个点 -> 死一个 一个环 -> 死环上点个数-1个 一个环加上内向树 - ...
- bzoj 1124: [POI2008]枪战Maf(贪心)
1124: [POI2008]枪战Maf Time Limit: 10 Sec Memory Limit: 162 MB Submit: 713 Solved: 278 [Submit][Stat ...
- BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)
题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...
- [POI2008]枪战Maf
[POI2008]枪战Maf 题目 有n个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪.因此,对于不同的开枪顺序,最后死的 ...
- [BZOJ 1124][POI 2008] 枪战 Maf
1124: [POI2008]枪战Maf Time Limit: 10 Sec Memory Limit: 162 MB Submit: 659 Solved: 259 [Submit][Stat ...
- BZOJ.1178.[APIO2009]会议中心(贪心 倍增)
BZOJ 洛谷 \(Description\) 给定\(n\)个区间\([L_i,R_i]\),要选出尽量多的区间,并满足它们互不相交.求最多能选出多少个的区间以及字典序最小的方案. \(n\leq2 ...
- [BZOJ 1112] [POI2008] 砖块Klo 【区间K大】
题目链接:BZOJ - 1112 题目分析 枚举每一个长度为k的连续区间,求出这个区间的最优答案,更新全局答案. 可以发现,这个区间的所有柱子最终都变成这k个数的中位数时最优,那么我们就需要查询这个区 ...
- bzoj 1045 [HAOI2008] 糖果传递 —— 贪心
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1045 好像是贪心...但这是一个环... 看博客:http://hzwer.com/2656 ...
- BZOJ 1113: [Poi2008]海报PLA
1113: [Poi2008]海报PLA Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1025 Solved: 679 [Submit][Sta ...
最新文章
- 测试用例设计方法-错误推测法
- java之父求职_Java求职实战之继承和多态
- 【深度思考】javaweb框架技术心得
- 如何阻止SAP CRM订单创建好之后,自动被置为传输状态这一行为
- mongodb 输出数组字段_MongoDb文档操作、索引操作
- 【android-音视频】listview中播放音频,实现音频时长的倒计时,暂停,切换。
- java中的数据结构——图
- php+mysql+记账系统_做了个php+mysql简单记账系统
- List map 转 list对象
- 【Python+Stata】豪斯曼检验:固定效应or随机效应?
- Elasticsearch:如何在聚合时选择所需要的 bucket 并进行可视化
- css-图片闪烁效果
- 旧约圣经对基督(弥赛亚)的预言
- 如何打造零信任时代的身份管理系统?
- 笔记本电脑无法进入睡眠状态_电脑进入睡眠模式后无法唤醒的原因解析
- html字体插件,20款jQuery CSS文字特效插件(有图有真相)
- 《矩阵理论》大萌课程笔记 - 特殊矩阵
- vue 项目 下载模板和导入模板
- 保姆式做启动盘,装win10专业系统,系统盘机械盘分区,下载网卡、主板等驱动
- comfast wireless usb adapter 配置手记
热门文章
- python存储和读取数据时出现错误_python读取json文件存sql及codecs读取大文件问题...
- indesign如何画弧线_彩铅画入门教程,如何给独角兽设计一款好发型
- 5菜鸟教程_excel图文教程:应用PQ工具进行数据整理
- html快速排序,快速排序.html
- git 更新_[技术分享T.191212]GitLab使用方法及git命令常见问题(不断更新)
- python epoll多路复用技术_python IO 多路复用 epoll简单模型
- 使用eclipse调试ns3配置说明
- 什么是四路串口服务器?
- 【渝粤教育】国家开放大学2019年春季 1124流行病学 参考试题
- [渝粤教育] 中国地质大学 大学英语(6) 复习题