[NOIP2015模拟10.27] 挑竹签 解题报告(拓扑排序)
Description
夏夜,早苗和诹访子在月光下玩起了挑竹签这一经典的游戏。
挑竹签,就是在桌上摆上一把竹签,每次从最上层挑走一根竹签。如果动了其他的竹签,就要换对手来挑。在所有的竹签都被挑走之后,谁挑走的竹签总数多,谁就胜了。
身为神明的诹访子自然会让早苗先手。为了获胜,早苗现在的问题是,在诹访子出手之前最多能挑走多少竹签呢?
为了简化问题,我们假设当且仅当挑最上层的竹签不会动到其他竹签。
Input
第一行输入两个整数n,m, 表示竹签的根数和竹签之间相压关系数。
第二行到m+1 行每行两个整数u,v,表示第u 根竹签压住了第v 根竹签。
Output
一共一行,一个整数sum,表示最多能拿走sum 根竹签。
Sample Input
6 6
1 2
2 3
3 1
4 3
4 5
6 5
Sample Output
3
样例解释:
一共有6 根竹签,其中1 压住2,2 压住3,3 压住1,4 压住3 和5,6 压住5。最优方案中,我们可以依次挑走4、6、5 三根竹签。而剩下的三根相互压住,都无法挑走。所以最多能挑走3 根竹签。
Data Constraint
对于40% 的数据,有1 <= n,m <= 1 000。
对于100% 的数据,有1 <= n,m <= 1 000 000。
题目很好理解,解法就是按照压的关系连有向边,拓扑排序即可。亏我一开始还打了10分钟缩点。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std; const int maxn=1e6+;
int n,m,tot,ans;
int head[maxn],ru[maxn];
struct EDGE
{
int to;int next;
}edge[maxn];
inline int read()
{
char ch=getchar();
int s=,f=;
while (!(ch>=''&&ch<='')) {if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<='') {s=(s<<)+(s<<)+ch-'';ch=getchar();}
return s*f;
}
void add(int x,int y)
{
edge[++tot]=(EDGE){y,head[x]};
head[x]=tot;
}
void topo()
{
queue <int> q;
for (int i=;i<=n;i++) if (!ru[i]) {q.push(i);ans++;}
while (!q.empty())
{
int k=q.front();q.pop();
for (int i=head[k];i;i=edge[i].next)
{
int y=edge[i].to;
ru[y]--;
if (!ru[y])
{
ans++;
q.push(y);
}
}
}
}
int main()
{
freopen("mikado.in","r",stdin);
freopen("mikado.out","w",stdout);
n=read();m=read();
for (int i=;i<=m;i++)
{
int x=read(),y=read();
add(x,y);
ru[y]++;
}
topo();
printf("%d\n",ans);
return ;
}
[NOIP2015模拟10.27] 挑竹签 解题报告(拓扑排序)的更多相关文章
- [NOIP2015模拟10.22] 最大子矩阵 解题报告(单调栈)
Description 我们将矩阵A中位于第i行第j列的元素记作A[i,j].一个矩阵A是酷的仅当它满足下面的条件: A[1,1]+A[r,s]<=A[1,s]+A[r,1](r,s ...
- [NOIP2015模拟10.22] 最小代价 解题报告 (最小生成树)
Description 给出一幅由n个点m条边构成的无向带权图.其中有些点是黑点,其他点是白点.现在每个白点都要与他距离最近的黑点通过最短路连接(如果有很多个黑点,可以选取其中任意一个),我们想要使得 ...
- JZOJ 4269. 【NOIP2015模拟10.27】挑竹签
4269. [NOIP2015模拟10.27]挑竹签 (File IO): input:mikado.in output:mikado.out Time Limits: 1000 ms Memory ...
- [NOIP2015模拟10.27] [JZOJ4270] 魔道研究 解题报告(动态开点+权值线段树上二分)
Description “我希望能使用更多的魔法.不对,是预定能使用啦.最终我要被大家称呼为大魔法使.为此我决定不惜一切努力.”——<The Grimoire of Marisa>雾雨魔理 ...
- [jzoj]4271. 【NOIP2015模拟10.27】魔法阵(37种转移的dp)
题意不说 应该这辈子都不会忘记了... 这是我人生中做的最SB的一道DP题. 真的打的我心态崩了.... 可是竟然被我调出来了..... 也是没谁了... 我们设\(F[i][j][S]\)表示到第\ ...
- [jzoj 5930] [NOIP2018模拟10.26】山花 解题报告 (质因数分类)
题目链接: http://172.16.0.132/senior/#contest/show/2538/2 题目: 小S决定从某一个节点$u$开始对其子树中与$u$距离小于$K$的节点代表的花树进行采 ...
- [JZOJ 5893] [NOIP2018模拟10.4] 括号序列 解题报告 (Hash+栈+map)
题目链接: https://jzoj.net/senior/#main/show/5893 题目: 题解: 考虑暴力怎么做,我们枚举左端点,维护一个栈,依次加入元素,与栈顶元素和栈内第二个元素相同时弹 ...
- [JZOJ 5885] [NOIP2018模拟9.27] 物理实验 解题报告 (思维)
题目链接: https://jzoj.net/senior/#main/show/5885 题目: 题解: 把$a$数组按升序排序 我们可以枚举$x$,发现对于任意$x$,最优情况下$y$一定等于$x ...
- [JZOJ 5905] [NOIP2018模拟10.15] 黑暗之魂(darksoul) 解题报告 (拓扑排序+单调队列+无向图基环树)
题目链接: http://172.16.0.132/senior/#main/show/5905 题目: oi_juruo热爱一款名叫黑暗之魂的游戏.在这个游戏中玩家要操纵一名有 点生命值的无火的余灰 ...
随机推荐
- HDU 5187 zhx's contest(防爆__int64 )
Problem Description As one of the most powerful brushes, zhx is required to give his juniors n probl ...
- AWS使用心得:当初我曾错过的那些宝贵经验
在今天的文章中,我整理出了大量当初以前错过.而至今仍将我追悔莫及的Amazon Web Services(简称AWS)使用心得. 在几年来的实践其中,我通过在AWS之上新手构建及部署各类应用程序而积累 ...
- Android与server通信的方法之中的一个(json)效率不高安全性不好
http通信.以xml或者json为载体.相互通信数据. Android对于http的网络通信,提供了标准的java接口--httpURLConnection接口.以及apache的接口--httpc ...
- Javaee 应用分层架构
应用分层的优点:修改方便,仅修改有问题的那层以及其相邻几层即可,层数越多,其相应的资源分配也会更加平均 缺点:耗费时间,速度慢,调用占用大量堆栈. JAVAEE的分层: 4层分法:1.客户层:运行在客 ...
- html5中调用摄像头拍照
方法: getCamera: 获取摄像头管理对象 对象: Camera: 摄像头对象 CameraOption: JSON对象.调用摄像头的參数 PopPosition: JSON对象,弹出拍照或摄像 ...
- 蚁视新家show,小伙伴们快来增加有范儿有爱的蚁视大家庭吧!
蚁视搬新家啦.新家在学院路上,离中关村非常近.离宇宙的中心非常近,离好多同学也非常近有木有! 新家绝对是超级创客范儿,绝对理想中的工作环境有木有!愿意增加蚁视的小伙伴们.快快来吧! 以下是蚁视新办公室 ...
- void空类型指针
; double db = 120.3; void *p; p = # cout << *(int *)p << endl;//转换成int类型的指针,再取值 ...
- .net垃圾回收-原理浅析
本文引自:http://www.cnblogs.com/wilber2013/p/4357910.html 在开发.NET程序过程中,由于CLR中的垃圾回收(garbage collection)机制 ...
- RXjava的简介
API 介绍和原理简析 1. 概念:扩展的观察者模式 观察者模式面向的需求是:举一个例子,警察在小偷实施作案的时候实施抓捕,在这一个例子中警察是观察者,小偷是被观察者.但是程序的观察者模式和这个还是有 ...
- javascript常用代码(不完整版)
求大神指点 Javascript嵌入式 <script typt:javascript>代码</script> 注释 //或者/*内容*/ 变量名赋值 Var 变量名 = 值 ...