首页 > 其他分享 >[USACO06DEC] Cow Picnic S

[USACO06DEC] Cow Picnic S

时间:2023-11-29 16:59:57浏览次数:32  
标签:std head Picnic USACO06DEC Cow int tot edge include

P2853 [USACO06DEC] Cow Picnic S

逆向思维

如果顺着题目走,不大好做。

考虑该题要求的是可以供所有奶牛到达的牧场,那么不如从奶牛所在的牧场下手

即对每个奶牛所在的牧场 \(DFS\),对所有到达点标记。

那么显然当一个点的标记等于 \(k\) 时,说明该牧场是合适的。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>

const int N = 1e3 + 10;
const int M = 1e4 + 10;
int k, n, m;
int ans;
int pasture[N];
bool vis[N];
int tag[N];

int tot, head[N];
struct Node {
	int to, next;
}edge[M];

void addEdge()
{
	int u, v;
	std::cin >> u >> v; 
	edge[++tot].to = v;
	edge[tot].next = head[u];
	head[u] = tot;
}

void dfs(int now)
{
	vis[now] = true; tag[now]++;
	for (int i = head[now]; i; i = edge[i].next)
		if (!vis[edge[i].to]) dfs(edge[i].to); 
}

int main()
{
 	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	std::cout.tie(nullptr);
	std::cin >> k >> n >> m;
	for (int i = 1; i <= k; i++) std::cin >> pasture[i];
	for (int i = 1; i <= m; i++) addEdge();
	for (int i = 1; i <= k; i++)
	{
		memset(vis, 0, sizeof(vis));
		dfs(pasture[i]);
	}
	for (int i = 1; i <= n; i++) ans = (tag[i] == k ? ans + 1 : ans); 
	std::cout << ans; 
	return 0;
}

标签:std,head,Picnic,USACO06DEC,Cow,int,tot,edge,include
From: https://www.cnblogs.com/kdlyh/p/17865265.html

相关文章

  • P9194 [USACO23OPEN] Triples of Cows P 题解
    Description给定一棵初始有\(n\)个点的树。在第\(i\)天,这棵树的第\(i\)个点会被删除,所有与点\(i\)直接相连的点之间都会两两连上一条边。你需要在每次删点发生前,求出满足\((a,b)\)之间有边,\((b,c)\)之间有边且\(a\not=c\)的有序三元组\((a,b,c)\)对数。\(n\leq2......
  • 项目管理之项目质量管理MoSCoW(莫斯科)优先级排序法
    项目质量管理是项目管理中至关重要的一环,它贯穿于项目的整个生命周期,包括项目启动、规划、执行、监控和控制。为了确保项目工作的质量,我们需要从多个方面入手,以下是一些关于如何保障项目工作质量管理的内容。项目产品质量检查路径项目准备阶段来自客户的质量期望验收标准与容许偏差......
  • [CF283E] Cow Tennis Tournamsan
    CF283E答案即为\(\binom{n}{3}\)减去不合法环数。一个三元环中最多1个点出度为2,所以出度为x的点会造成\(\binom{x}{2}\)个不合法的环。\(\Omicron(nm)\)的做法就是枚举i,判断i与n个点连边是否反向(0,1表示)。然后可以发现对于一段区间[l,r]修改后做贡献的点是......
  • picnic planning证明
    首先最终的答案一定包含最开始的T条边,不然的话,我们选择这T条边中没被包含的任意一条边,把它加入现有的生成树由于这T条边连接的是不同的连通块,所以加入这条边后生成树会形成一个环,而且这个环除了这一条边不包含其他任何一条这T条边中的一边又因为这T条边是最小的T条边,我们选择这......
  • P3119 [USACO15JAN] Grass Cownoisseur G 题解
    分析大概是强连通分量里面最水的一道紫题,不过细节挺多的,做题的时候给蒟蒻震惊到了。题目要求是从\(1\)走到某个点,然后再走回\(1\)号点,中途可逆行一次,问最多能经过几个点。有一个明显的思路是存两个图,一个正图一个反图,正图是为了求\(1\)到各个点的距离,反图是为了求各个点......
  • USACO 2023 US Open Platinum Triples of Cows
    洛谷传送门LOJ传送门hottea.一次删点操作的影响太大了,考虑添加虚点以减小影响(相同的套路在CF1882E2TwoPermutations(HardVersion)也出现过)。具体而言,我们把第\(i\)条边\((u,v)\)变成\((u,n+i),(v,n+i)\)。称编号\(\len\)的点为黑点,编号\(>n\)的点......
  • Codeforces Round 707 (Div. 2, based on Moscow Open Olympiad in Informatics) B. N
    按以下\(n\)次操作制作蛋糕。叠上第\(i\)块面包,然后浇上\(a_i\)单位的奶油。可以使当前往下\(a_i\)块面包沾上奶油。输出空格隔开的\(n\)个数,第\(i\)个的\(0/1\)代表第\(i\)块面包是否沾有奶油。比较显然的思路可以进行差分修改。view1#include<bits/std......
  • P1522 [USACO2.4] 牛的旅行 Cow Tours
    Problem题目简述给你两个独立的联通块,求:在两个联通块上各找一个点连起来,使得新的联通块的直径的最小值。思路本题主要做法:\(Floyd\)。首先,Floyd求出任意两个点之间的最短路。枚举每一个点,求出以这个点能走到的所有点中距离的最大值。(一定在能走到的情况下,不然默认距离就是......
  • P6066 [USACO05JAN] Watchcow S
    prologue这个题这么水的一个板子题。analysis这个题目我们正反建两条边,在跑欧拉回路的时候,看这个边是不是被走过,走过就不走,跳过这个边。如果没走,就走这条边并且标记这个边走过了。codetime#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#definerlr......
  • 洛谷P3612 [USACO17JAN] Secret Cow Code S
    [USACO17JAN]SecretCowCodeS题面翻译奶牛正在试验秘密代码,并设计了一种方法来创建一个无限长的字符串作为其代码的一部分使用。给定一个字符串,让后面的字符旋转一次(每一次正确的旋转,最后一个字符都会成为新的第一个字符)。也就是说,给定一个初始字符串,之后的每一步都会增加当......