【洛谷P2341】受欢迎的牛】的更多相关文章

HAOI2006 (洛谷P2341)受欢迎的牛 题解 题目描述 友情链接原题 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的"喜欢"是可以传递的--如果A喜 欢B,B喜欢C,那么A也喜欢C.牛栏里共有N 头奶牛,给定一些奶牛之间的爱慕关系,请你 算出有多少头奶牛可以当明星. 输入输出格式 输入格式: 第一行:两个用空格分开的整数:N和M 第二行到第M + 1行:每行两个用空格分开的整数:A和B,表示A喜欢B…
传送门啦 这是一个tarjan强连通分量与出度结合的例题. 先明确一下题意,如果这个点(缩点之后的)没有出度,这个点才能成为明星牛(明星牛的定义是:所有牛都喜欢他才可以). 由于我们进行了缩点,所以我就另外开一个数组num[i]:表示这个强连通分量中有多少个点. int sum = 0; for(int i=1;i<=cnt;i++) if(!chu[i]) ans = num[i] , sum++; if(sum >= 2) printf("0"); else print…
强连通分量 一个结论: 在有向图中, 一个联通块能被所有点遍历当且仅当图中只有一个连通块出度为零 #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <algorithm> #include <stack> using namespace std; const int MA…
洛谷P2341:https://www.luogu.org/problemnew/show/P2341 前言 这题看错题目 足足花了将近5小时提交了15次 在一位dalao的提醒下才AC了 记得要看清题意啊! 思路 可以成为明星的牛是图中唯一的出度为0的强连通分量中的所有牛 因为如果有两个或以上的话 他们之间无法互相爱慕 即可把所有互相爱慕的牛用Tarjan缩点 判断如果出度为0的强连通分量只有一个 就输出这个强连通分量中的牛数 如果有两个或以上即无解 代码 #include<iostream>…
题库:洛谷 题号:2341 题目:受欢迎的牛 link:https://www.luogu.org/problemnew/show/P2341 思路:因为奶牛的爱慕关系具有传递性,所以每个环(强连通分量)里的奶牛是互相喜欢的.那么我们可以用到Tarjan算法把每个强连通分量找出,并缩点,把每个强连通分量都缩成一个点(当前缩点里的奶牛都是互相喜欢的).这样一来,这个图就变成了一个DAG(有向无环图).然后我们只需要统计每个缩点的出度就好了,如果一个点有出度&&我们知道这个图是一个DAG,所以…
P2341 [HAOI2006]受欢迎的牛 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的"喜欢"是可以传递的--如果A喜 欢B,B喜欢C,那么A也喜欢C.牛栏里共有N 头奶牛,给定一些奶牛之间的爱慕关系,请你 算出有多少头奶牛可以当明星. 输入输出格式 输入格式:  第一行:两个用空格分开的整数:N和M  第二行到第M + 1行:每行两个用空格分开的整数:A和B,表示A喜欢B 输出格式: …
P2341 [HAOI2006]受欢迎的牛/POJ2186:Popular Cows 题目背景 本题测试数据已修复. 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C.牛栏里共有N 头奶牛,给定一些奶牛之间的爱慕关系,请你 算出有多少头奶牛可以当明星. 输入输出格式 输入格式:  第一行:两个用空格分开的整数:N和M  第二行到第M + 1行…
P2341 [HAOI2006]受欢迎的牛|[模板]强连通分量 https://www.luogu.org/problem/P2341 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的"喜欢"是可以传递的--如果A喜 欢B,B喜欢C,那么A也喜欢C.牛栏里共有N 头奶牛,给定一些奶牛之间的爱慕关系,请你 算出有多少头奶牛可以当明星. 输入格式  第一行:两个用空格分开的整数:N和M  第二行到第…
P2341 [HAOI2006]受欢迎的牛 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C.牛栏里共有N 头奶牛,给定一些奶牛之间的爱慕关系,请你 算出有多少头奶牛可以当明星. 输入输出格式 输入格式:  第一行:两个用空格分开的整数:N和M  第二行到第M + 1行:每行两个用空格分开的整数:A和B,表示A喜欢B 输出格式:  第一行:…
受欢迎的牛 题目描述 一些可以当明星的牛,一定会构成一个强连通分量,我们可以先缩点,最后统计一下出度为零的强连通分量大小即可, 若出度为零的强连通分量个数大于1,则输出0 #include<iostream> #include<cstring> #include<cstdio> using namespace std; #define N 10010 #define M 100010 int n,m,dfn[N],low[N],belong[N],du[N],cnt;…
受欢迎的牛 洛谷链接 题目大意: 有n头牛,牛会喜欢其他牛和自己,而喜欢是可以传递的,求被所有牛喜欢的牛的数量. 思路: 这是一道tarjan缩点的题目.被所有牛都喜欢的牛,一定会在一个强连通分量里.所以我们可以先求出所有强连通分量,缩点后找出度为0的点,如果超过1,则说明没有被所有牛喜欢的牛,如果只有1个,那么受欢迎的牛的数量就是这个点所对应的原来的强连通分量中所含的点的个数. 代码: #include<stack> #include<cstdio> #define N 1001…
题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C.牛栏里共有N 头奶牛,给定一些奶牛之间的爱慕关系,请你 算出有多少头奶牛可以当明星. 输入输出格式 输入格式:  第一行:两个用空格分开的整数:N和M  第二行到第M + 1行:每行两个用空格分开的整数:A和B,表示A喜欢B 输出格式:  第一行:单独一个整数,表示明星奶牛的数量 输入输出样…
https://www.luogu.org/problem/P2341 缩点之后唯一 一个出度为0的点 #include<cstdio> #include<iostream> using namespace std; #define N 10001 #define M 50001 int front[N],nxt[M],to[M],tot; int dfn[N],low[N],st[N],top,bl[N],siz[N]; bool vis[N]; int out[N]; void…
题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C.牛栏里共有N 头奶牛,给定一些奶牛之间的爱慕关系,请你 算出有多少头奶牛可以当明星. 输入输出格式 输入格式:  第一行:两个用空格分开的整数:N和M  第二行到第M + 1行:每行两个用空格分开的整数:A和B,表示A喜欢B 输出格式:  第一行:单独一个整数,表示明星奶牛的数量 输入输出样…
题面 题解 \(Tarjan\)缩点后统计每个点的出度. 如果有多个点出度为\(0\),就直接输出\(0\),否则输出出度为\(0\)的强连通分量里的点数. 代码 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <cmath> #include <cctype>…
在本题中很明显,给你一个有向图,要用tarjan缩点. 缩点后,一头牛要受到所有牛的欢迎,那么该点的出度要为0,这是容易证明的:如果该点还有出度,比如a连向b,那么a不受到b的欢迎.所以我们要找出度为0的点,找到后该点中点的个数就是答案. 注意:出度为0的点只能有一个,如果有多个出度为0的点,那么这些点都不受到彼此的欢迎.因此题目有解的情况就是只有一个出度为0的点. (以上都是缩点后的分析). 1 #include<bits/stdc++.h> 2 using namespace std; 3…
http://poj.org/problem?id=2186 || https://www.luogu.org/problem/show?pid=2341 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 33470   Accepted: 13634 Description Every cow's dream is to become the most popular cow in the herd. In a herd…
今天学了强连通分量的Tarjan算法,做了这道类似于板子题的题(尽管我调了1.5h).主要的思路是用Tarjan缩点之后,求每个点的入度(实际上是出度,因为我是反着连边的).如果 有且只有一个点的入度大于零,那个强连通分量里有的点的个数就是答案.具体实现见代码: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 10010 #defin…
题目传送门 解题思路: 先求强联通分量,缩点,然后统计新图中有几个点出度为0,如果大于1个,则说明这不是一个连通图,答案即为0.否则入度为0的那个强连通分量的点数即为答案 AC代码: #include<iostream> #include<cstdio> #include<stack> #include<set> using namespace std; ],tot; ],low[],sum,rp; ],_head[],num[]; ]; struct kk…
P2990 [USACO10OPEN]牛跳房子Cow Hopscotch 题目描述 The cows have reverted to their childhood and are playing a game similar to human hopscotch. Their hopscotch game features a line of N (3 <= N <= 250,000) squares conveniently labeled 1..N that are chalked o…
P3047 [USACO12FEB]附近的牛Nearby Cows 题目描述 Farmer John has noticed that his cows often move between nearby fields. Taking this into account, he wants to plant enough grass in each of his fields not only for the cows situated initially in that field, but…
题意 题目链接 Sol 显然如果题目什么都不说的话需要\(\frac{n * (n - 1)}{2}\)个相对关系 然后求一下传递闭包减掉就行了 #include<bits/stdc++.h> using namespace std; const int MAXN = 1001; inline int read() { char c = getchar(); int x = 0, f = 1; while(c < '0' || c > '9') {if(c == '-') f =…
题面 传送门 题解 题目转化一下就是所有点都在直线\(Ax+By-C=0\)的同一侧,也就可以看做所有点代入\(Ax+By-C\)之后的值符号相同,我们只要维护每一个点代入直线之后的最大值和最小值,看看每条直线的最大最小值符号是否相同就好了 以最大值为例,我们强制\(B\geq 0\),那么能令这条直线取到最大值的点一定在所有点的上凸壳上,我们把凸壳搞出来,然后把所有直线按斜率从小到大排序,一遍扫过去就可以更新答案了 然而对于每条直线把前面所有点做个凸包?那有个吉儿用我还不如暴力枚举来得快 我们…
题应该是假的...先不做了 https://www.cnblogs.com/Blue233333/p/7249057.html 比如输入5 0,答案是10,但可以比较8次就出来.就是在一个已知有序数列中二分插入一个数 例如5 0: 记f(x)=ceil(log2(x)),则此时答案为f(1)+f(2)+f(3)+f(4)+f(5)=8,而不是10 但是在已经提供一些信息的情况下就更搞不清楚了....…
[题解] 每个格子可以到达的区域是一个菱形,但是我们并不能快速的求和,所以我们可以把原来的草地旋转45度,用二维前缀和快速处理菱形的区域的和. #include<cstdio> #include<cstring> #include<algorithm> #define LL long long #define N 1000 #define rg register using namespace std; int n,m,k,a[N][N]; LL s[N][N],ans…
题目 贪心,可以用分类讨论的方法,可以得出如果\(n^2\)枚举则会过不了,而我们观察原题中的式子,有: \(∣x1−x2∣+∣y1−y2∣\) 发现式子中的绝对值很恶心,而考虑如果没有绝对值的话会有四种情况. \((x1-x2)+(y1-y2)=x1+y1-(x2+y2)\) \((x1-x2)-(y1-y2)=x1-y1-(x2-y2)\) \(-(x1-x2)+(y1-y2)=x2-y2-(x1-y1)\) \(-(x1-x2)-(y1-y2)=x2+y2-(x1+y1)\) 可以发现x2…
单调队列优化dp; 对于每个点开个单调队列,按转移到它的点到它的距离从大到小,得分也从大到小排列. 每次枚举当前点前面的所有点,对于每个点的队列中二分一个距离小于等于它到当前点的答案值,放到当前点的队列中. //Twenty #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<vector&g…
传送门啦 其实这个题只要读懂分析好题意就不是很难. 就是将一个有向图进行缩点操作,把一个强连通分量看成一个点,求入度为 0 的点和出度为 0 的点各有多少. 在这里先向大家推荐两个题目,建议大家先去看看那两个题: 1.[p2002消息扩散](https://www.luogu.org/problemnew/show/P2002) 这是强连通分量与入度关系的例题 2.[p2341受欢迎的牛](https://www.luogu.org/problemnew/show/P2341) 这是强连通分量和…
BZOJ原题链接 洛谷原题链接 显然在一个强连通分量里的奶牛都可以相互喜欢,所以可以用\(tarjan\)求强连通并缩点. 要求明星奶牛必须被所有人喜欢,显然缩点后的图必须满足只有一个点没有出度,因为若有两个点没有出度,那么其中一个点所包含的奶牛显然不能喜欢另一个点的奶牛. 而这个唯一的没有出度的点所包含的奶牛都可以成为明星奶牛. #include<cstdio> using namespace std; const int N = 1e4 + 10; const int M = 5e4 +…
传送门(洛谷) 传送门(bzoj) 题目 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认为牛C受欢迎.你的任务是求出有多少头 牛被所有的牛认为是受欢迎的. Input 第一行两个数N,M. 接下来M行,每行两个数A,B,意思是A认为B是受欢迎的(给出的信息有可能重复,即有可能出现多个A,B) Output 一个数,即有多少头牛被所有的牛认为是受欢迎的. Sample…