BZOJ 1124: [POI2008]枪战Maf】的更多相关文章

1124: [POI2008]枪战Maf Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 617  Solved: 236[Submit][Status][Discuss] Description 有n个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪.因此,对于不同的开枪顺序,最后死的人也不同. Input 输入n人数<1000000 每个人的aim Output 你要求最…
[POI2008]枪战Maf Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 741  Solved: 295[Submit][Status][Discuss] Description 有n个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪.因此,对于不同的开枪顺序,最后死的人也不同. Input 输入n人数<1000000 每个人的aim Output 你要求最后死亡数目的…
题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最后死的人数最小值以及最大值. \((1 \le n \le 10^6)\) 题解 不难发现是一道思博构造题. 首先考虑下最大值,我们只需要把这张图分三种情况讨论: 单个自环,贡献为 \(1\) 一个大于 \(1\) 的环,贡献为 \(len - 1\) 一个基环树,贡献为 \(size - num_…
Description 有n个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪.因此,对于不同的开枪顺序,最后死的人也不同. Input 输入n人数<1000000 每个人的aim Output 你要求最后死亡数目的最小和最大可能 Sample Input 8 2 3 2 2 6 7 8 5 Sample Output 3 5 Solution 贪心题 最大值: 一个自环,贡献 \(\text{1}\) 一个大于 \(\t…
题意 \(n(n < 1000000)\)个人,每个人\(i\)指向一个人\(p_i\),如果轮到\(i\)了且他没死,则他会将\(p_i\)打死.求一种顺序,问死的人最少和最多的数目. 分析 贪心+乱搞 题解 最多剩下的: 链:(n+1)/2 环:n/2 环套内向树:维护没被杀的点,即用队列维护入度为0的点,然后环变成了一堆链,再用上面的结论即可. 最少剩下的: 链:1 环:1 环套内向树:入度为0的个数 #include <bits/stdc++.h> using namespace…
[POI2008]枪战Maf 题目 有n个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪.因此,对于不同的开枪顺序,最后死的人也不同. INPUT 输入n人数<1000000 每个人的aim OUTPUT 你要求最后死亡数目的最小和最大可能 SAMPLE INPUT 8 2 3 2 2 6 7 8 5 OUTPUT 3 5 解题报告 考试时候打出了tarjan,然而不会用= = 正解: tarjan 我们分连通块来考虑…
[BZOJ1124][POI2008]枪战Maf Description 有n个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪.因此,对于不同的开枪顺序,最后死的人也不同. Input 输入n人数<1000000 每个人的aim Output 你要求最后死亡数目的最小和最大可能 Sample Input 8 2 3 2 2 6 7 8 5 Sample Output 3 5 题解:最大:首先入度为0的点一定不会死:另外,…
问题 C: [POI2008]枪战Maf 时间限制: 1 Sec  内存限制: 256 MB 题目描述 有n个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪.因此,对于不同的开枪顺序,最后死的人也不同. 输入 输入n人数<1000000 每个人的aim 输出 你要求最后死亡数目的最小和最大可能 样例输入 8 2 3 2 2 6 7 8 5 样例输出 3 5 本次考试最后一个题,被老师评论称难炸了……然而貌似不那么难,但你…
吐槽:扣了几个小时,大致思路是有了,但是贪心的证明就是不会, 死磕了很长时间,不想想了,结果码代码又不会码.. 深深体会到自己码力很差,写很多行还没写对,最后别人代码全一二十行,要哭了 以下可能是个人口胡瞎扯:首先n个点,每个点一个出边,所以这个图可能是有很多连通块,具体有以下几种形态: 环 内向基环树 树上有一个点套一个自环 这三种构成森林. 先看最多死多少人. 环的话是$siz-1$ 内向基环树只有树那部分的叶子(无入度)可以存活.画图举例辅助理解. 树上带自环:同上 再看很烦人的最少死多少…
#define int long long using namespace std; signed main(){ 这个题一看就是图论题,然后我们观察他的性质,因为一个图论题如果没有什么性质,就是真·不可做...... 每个疯子只有一个出度,因此我们YY一下:{ 这是一个有向图,所以,我们可以Tarjan,然后我们把点分为强联通分量内,和强联通分量外,然后我们从强联通分量内的点开始走:{ 我们一定会走回自己,而且在这条路上不会出轨,那么这个强联通分量里,有了一个环,我们继续看这个环,他不会往外申…