[P2921][USACO08DEC]在农场万圣节Trick or Treat on the Farm (记忆化搜索/DP?,Tarjan?)
第一看还以为是水题
随便打了一个bfs只有40分……
然后开始颓废
#include<bits/stdc++.h>
#define N 100005
using namespace std;
int nxt[N];
bool vis[N];
void bfs(int x)
{
memset(vis, , sizeof(vis));
queue<int>q;
q.push(x);
vis[x] = true;
int cnt = ;
while (!q.empty())
{
int now = q.front();
if (vis[nxt[now]] == true)
{
printf("%d\n", cnt);
return;
}
else {
q.pop();
q.push(nxt[now]);
cnt++;
vis[nxt[now]] = true;
}
}
}
int main()
{
int n; scanf("%d", &n);
for (int i = ; i <= n; i++)
{
scanf("%d", &nxt[i]);
}
for(int i=;i<=n;i++)
bfs(i);
}
垃圾代码
然后在水社区的时候
看到一个当时和我一起打这道题的网友@Frozencode (貌似是位大佬)提到这道题
一开始没怎么想写博客的
但是现在还是写吧
思路
之前是bfs,想用记忆化很难实现(我这个蒟蒻没打出来,大佬见笑了)
一开始想储存到一个点的需要的步骤储存下来
但是bfs会一直更新,不能那么草率地使用啊
然后看tag是DP?我不会DP
于是颓废的我点开了题解
题解一个是玄学模拟。我不会模拟
然后大神们很多写的Tarjan。为了试图看懂大佬的代码,我甚至想去学tarjan。但是我不会tarjan。
无奈之下,我还是回归开始的搜索,但是打dfs。
结果过了……
代码
献丑了
VS的码风
#include<bits/stdc++.h>
#define N 100005
using namespace std;
int n,x,to[N],rd[N],w[N],dep[N],mk[N];
char vis[N], ins[N];
int dfs(int x);
int main()
{
scanf("%d", &n);
for (int i = ; i <= n; ++i)
scanf("%d",&to[i]),++rd[to[i]];
for (int i = ; i <= n; ++i)
if (!rd[i]) w[i] = , dfs(i);
for (int i = ; i <= n; ++i)
if (!vis[i]) dfs(i);
for (int i = ; i <= n; ++i)
printf("%d\n",w[i]);
return ;
}
int dfs(int x)
{
int t = to[x]; vis[x] = ins[x] = ;
if (!vis[t])
{
dep[t] = dep[x] + ;
w[x] = dfs(t);
w[x] += (mk[t] ? (mk[x] = (mk[x] != ? : ), ) : );
}
else
if (ins[t])
w[x] = dep[x] - dep[t] + , mk[x] = , mk[t] = (x == t ? : );
else
w[x] = w[t] + ;
ins[x] = ;
return w[x];
}
想睡觉了……因此不多解释了
现在23:11
思路也大多数是看题解的
我去找找……
找到了
这位大神的https://www.luogu.org/blog/backupnoob/solution-p2921
虽然压行可读性低,但是基本可以看懂
(说白了吧,我抄题解的……)
深深感觉到自己的弱小
[P2921][USACO08DEC]在农场万圣节Trick or Treat on the Farm (记忆化搜索/DP?,Tarjan?)的更多相关文章
- P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 记忆化搜索dfs
题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...
- LGOJ P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
今天我来给大家带来一片蒟蒻题解 ~~真香 LGOJ P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题目描述 每年,在威斯康星州,奶牛们都会穿上 ...
- P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm(Tarjan+记忆化)
P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题意翻译 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N< ...
- 洛谷——P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题意翻译 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N< ...
- C++ 洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题解
P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 分析: 这棵树上有且仅有一个环 两种情况: 1.讨论一个点在环上,如果在则答案与它指向点相同, 2 ...
- 洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...
- P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
对于一个牛,它存在两种状态:1.处于联通分量 2.不处于联通分量.对于处于联通分量的牛,求出联通分量的大小:对于不处于联通分量的牛,求出其距离联通分量的路程+联通分量大小. 不同的联通分量,染上不同的 ...
- [洛谷P2921][USACO08DEC]在农场万圣节Trick or Treat on the Farm
题目大意:给你一张有向图,每个点最多一条出边,问从每个开始,走多少步会到一个已经过的点 题解:$tarjan$缩点,然后建反图$DP$ 卡点:无 C++ Code: #include <cstd ...
- LUOGU P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
传送门 解题思路 记忆化搜索,如果搜到环,就将环的大小处理出来. 代码 #include<iostream> #include<cstdio> #include<cstr ...
随机推荐
- 用 DocumentFormat.OpenXml 和Microsoft.Office.Interop.Word 写入或者读取word文件
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- UE4 UPROPERTY UFUNCTION
http://blog.csdn.net/sinat_27456831/article/details/52800514
- C# Enum,Int,String的互相转换 [转]
C# Enum,Int,String的互相转换 Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名 ...
- 【回顾】html链接、头部
1.HTML 链接 HTML 使用超级链接与网络上的另一个文档相连.几乎可以在所有的网页中找到链接.点击链接可以从一张页面跳转到另一张页面. HTML 超链接(链接) HTML使用标签 <a&g ...
- bzoj2961 共点圆 bzoj 4140
题解: 比较水的一道题 首先我们化简一下式子发现是维护xxo+yyo的最值 显然是用凸包来做 我们可以直接用支持插入删除的凸包 也是nlogn的 因为没有强制在线,我们也可以cdq,考虑前面一半对答案 ...
- PHP Manager 安装失败的解决方法, PHP Manager 1.4 for IIS 10,经验证支持windows server 2016版本
// 另有无需进行修改注册表的安装包,经测试最高支持Windows Server 2016 版本,下载地址如下: https://github.com/EnhWeb/PHPManager/tree/m ...
- python全栈开发day58-mysql存储过程,权限,索引,慢日志,执行计划,分页优化处理
1.存储过程 delimiter // create procedure insert_data(in rows int) begin DECLARE n INT DEFAULT 1; drop ta ...
- Codeforces 1101F Trucks and Cities dp (看题解)
Trucks and Cities 一个很显然的做法就是二分然后对于每个车贪心取check, 这肯定会TLE, 感觉会给人一种贪心去写的误导... 感觉有这个误导之后很难往dp那个方向靠.. dp[ ...
- jquery的div局部刷新
jquery的div局部刷新 //div的局部刷新 $(".dl").load(location.href+" .dl"); 全页面的刷新方法 window.l ...
- Practice| 流程控制
若整数a除以非零整数b,商为整数,且余数为零, 我们就说a能被b整除(或说b能整除a),a为被除数,b为除数,即b|a("|"是整除符号),读作"b整除a"或& ...