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

8
2 3 2 2 6 7 8 5

Sample Output

3 5

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20165234 《Java程序设计》第五周学习总结

第五周学习总结 教材学习内容总结 第七章 内部类与异常类 内部类内部类&#xff1a;在一个类中定义另一个类。 外嵌类&#xff1a;包含内部类的类&#xff0c;称为内部类的外嵌类。 内部类的类体中不能声明类变量和类方法。外嵌类的类体中可以用内部类声明对象&#xff0c;作为…

美国华尔街拥抱区块链是最大的威胁

Overstock的首席执行官帕特里克伯恩宣布证券交易委员会已批准其计划在区块链上发行股票&#xff0c;该区块链是推动比特币数字货币的巨大在线分类账。 这是一个重要的时刻。至少在理论上&#xff0c;区块链可以更有效&#xff0c;准确和公开地跟踪股票&#xff0c;债券和其他金…

java枚举和枚举类_Java枚举:您拥有优雅,优雅和力量,这就是我所爱!

java枚举和枚举类当Java 8即将面世时&#xff0c;您确定您对Java 5中引入的枚举很熟悉吗&#xff1f; Java枚举仍然被低估了&#xff0c;很可惜&#xff0c;因为它们比您想象的要有用&#xff0c;它们不仅仅用于通常的枚举常量&#xff01; Java枚举是多态的 Java枚举是可以包…

【SpringCloud】第五篇: 路由网关(zuul)

前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具&#xff0c;包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单&#xff0c;可以在开发人员的电脑上跑。 工具:…

如何更新Jenkins作业发布config.xml

最近&#xff0c;我想更新Cloudbees中的一些作业&#xff08;未使用DSL定义&#xff09;&#xff0c;为每个作业添加一些属性。 好吧&#xff0c;我在使其工作时遇到了一些麻烦&#xff0c;这是我的注意事项&#xff08;我使用的是Jenkins 1.651.2.1&#xff0c;但有可能它应与…

月下“毛景树”

Description 毛毛虫经过及时的变形&#xff0c;最终逃过的一劫&#xff0c;离开了菜妈的菜园。 毛毛虫经过千山万水&#xff0c;历尽千辛万苦&#xff0c;最后来到了小小的绍兴一中的校园里。爬啊爬~爬啊爬~~毛毛虫爬到了一颗小小的“毛景树”下面&#xff0c;发现树上长着他最…

自由口通信模式下计算机读写PLC存储区的程序

自由口通信模式下计算机读写PLC存储区的程序 2008-8-20 8:51:00 来源&#xff1a;摘 要&#xff1a;本文介绍了在自由口通信模式下&#xff0c;用计算机读写S7-200 PLC存储区内相邻的多个字节数据的通信程序设计方法&#xff0c;程序设计中采用了多种可靠性措施。 关键词&…

Zookeeper入门

ZooKeeper 是一个开源的分布式协调架&#xff0c;主要用来解决分布式集群中应用系统的一致性问题 本质 分布式的文件存储系统(Zookeeper文件系统监听机制)&#xff0c;是一个基于观察者模式设计的分布式服务管理框架 zookeeper的数据结构 Zookeeper的层次模型称作Data Tree,…

【laravel5.4】重定向带参数

1、 2、重定向回上一页面 3、返回上一页面带参数 转载于:https://www.cnblogs.com/xuzhengzong/p/8715463.html

Google Protocol Buffers 2.3.0 for java 快速开始

Google Protocol Buffers &#xff12;.3.0 for java 快速开始 博客分类&#xff1a; Java JavaGoogleUbuntuLinux数据结构Protocol Buffers是一个平台中立&#xff0c;编程语言无关的&#xff0c;可扩展的机制&#xff0c;是用于结构化数据串行化的灵活、高效、自动的方法&a…

[MEGA DEAL]终极Java捆绑包(95%折扣)

通过114个小时的培训来掌握这种流行的编码语言&#xff0c;从而开始您的编程奥德赛 嘿&#xff0c;怪胎&#xff0c; 本周&#xff0c;在我们的JCG Deals商店中 &#xff0c;我们提供了一个极端的报价 。 我们提供的Ultimate Java Bundle 仅售69美元&#xff0c;而不是原始价…

android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】

android与PC&#xff0c;C#与Java 利用protobuf 进行无障碍通讯【Socket】 2011-04-27 17:00:11 标签&#xff1a;休闲 Java Socket 移动开发 android 原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律…

jenkins api_接触Jenkins(Hudson)API,第1部分

jenkins api哪一个-哈德森还是詹金斯&#xff1f; 都。 几个月前&#xff0c;我开始使用Hudson v1.395来从事这个小项目&#xff0c;在出现巨大分歧之后又回到了这个项目。 我以此为契机&#xff0c;看我将来选择永久搬到詹金斯时是否会遇到任何重大问题。 出现了一些麻烦-最值…

Swing应用程序中的JavaFX 8 DatePicker

1.概述 本文显示了一个使用JavaFX 8 DatePicker控件的Java SE 8 Swing应用程序的示例。 DatePicker控件允许用户以文本形式输入日期或从日历弹出窗口中选择日期。 本示例使用其中带有FX控件的Swing JFrame 。 为了将FX内容嵌入Swing应用程序中&#xff0c; javafx.embed.swing…

Apache Bench安装与使用

转载&#xff1a;ApacheBench&#xff08;ab&#xff09;使用详解 一、Apache Bench简介 ApacheBench 是 Apache 服务器自带的一个web压力测试工具&#xff0c;简称ab。ab又是一个命令行工具&#xff0c;对发起负载的本机要求很低&#xff0c;根据ab命令可以创建很多的并发访问…

轻松搭建一个Windows SVN服务器

轻松搭建一个Windows SVN服务器 前文所述SVN客户端使用的时候&#xff0c;用的SVN服务器通常为外部&#xff0c;例如Google Code的服务器&#xff0c;不过&#xff0c;做为一个程序开发人员&#xff0c;就算自己一个人写程序&#xff0c;也应该有一个SVN版本控制系统&#xff0…

Spring框架中的内容协商

1.简介 使用BeanNameViewResolver完成的工作就是&#xff0c;我们刚刚在Spring上下文中创建了多个bean视图以生成预期的输出。 Spring很快引入了内容协商策略 &#xff0c;该策略可以使用传统的RESTful ResponseBody方法和HTTP消息转换器&#xff0c;以JSON或XML返回所需的输出…

logging配置

settings.py # Django的日志配置项BASE_LOG_DIR os.path.join(BASE_DIR, "log")LOGGING {version: 1, # 保留字disable_existing_loggers: False, # 禁用已经存在的logger实例# 日志文件的格式formatters: {# 详细的日志格式standard: {format: [%(asctime)s][%(…

Protobuf学习笔记

Protobuf学习笔记 Posted by iamxhuon 2012/05/22 Leave a comment (0)Go to commentsProtocol buffers是什么&#xff1f; 首先了解一下Protocol Buffers(简称ProtoBuf)是什么&#xff1f;官网对它的定义如下&#xff1a; Protocol buffers are Google’s language-neutral, …

Tortoise SVN 版本控制常用操作知识

Tortoise SVN 版本控制常用操作知识 Posted on 2010-11-26 23:07 szh114 阅读(5897) 评论(0) 编辑 收藏 今天老大跑过来问我如何把SVN服务器上的当前版本回退到某一个版本上去&#xff0c;我没回答上来&#xff0c;很失败&#xff0c;所以现在整理一下Tortoise SVN的操作知识&…