首页 > 其他分享 >AGC010F 题解

AGC010F 题解

时间:2022-09-03 23:33:30浏览次数:52  
标签:include AGC010F int 题解 flag 棋子 now dis

现在也就会写一写代码长度不超过 \(1k\) 的题目了。 /kk

看上去一脸不可做,看到 从必败状态逆推 的提示后会了。

考虑什么算是必败状态,我们设此时棋子所在的位置为 \(now\) 。
那么可以发现,当对于所有的 \(t\) 存在 \(now\rightarrow t\) 这条边,都满足 \(A_{now}\leq A_t\) 时,在 \(t\) 点一定是必败的。
原因显然,因为对于上述的情况,一但我把棋子从 \(now\) 移走,对手就会把它移回到 \(now\) 点,然后我就寄了。
我们考虑把眼光放低,着重去看一次移棋子的操作,容易发现当 \(A_{now}\leq A_t\) 时我把棋子从 \(now\) 移到 \(t\) 是不能做的。
原因是一样的,因为对手仍然可以把我赶回 \(now\) 。
所以可以看出你一条边是不可能从不同方向经过两次,也就是说在树中不能走回头路。

那我们直接令 \(i\) 为根节点,跑 \(n\) 遍 \(\text{DFS}\) ,复杂度 \(O(n^2)\) 。
代码只有 800B ,小学生写不出来的话幼儿园都会写。。。

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

#define File(a) freopen(a".in", "r", stdin), freopen(a".out", "w", stdout)

const int N = 5005;

int n, a[N], flag[N];
std::vector <int> dis[N];

inline void dfs(int now, int father) {
  for (int t : dis[now]) {
    if (t == father) continue;
    dfs(t, now);
    if (flag[t] == 0 && a[now] > a[t]) 
      flag[now] = 1;
  }
}

signed main(void) {
  std::cin >> n;
  for (int i = 1; i <= n; i++) std::cin >> a[i];
  for (int i = 1, x, y; i < n; i++) {
    scanf("%d %d", &x, &y);
    dis[x].emplace_back(y);
    dis[y].emplace_back(x);
  }
  for (int i = 1; i <= n; i++) {
    memset(flag, 0, sizeof(flag));
    dfs(i, 0);
    if (flag[i] == 1)
      std::cout << i << " ";
  }
  std::cout << std::endl;
  return 0;
}

标签:include,AGC010F,int,题解,flag,棋子,now,dis
From: https://www.cnblogs.com/Oier-GGG/p/16653964.html

相关文章

  • 攻防世界 pwn1 题解
    攻防世界pwn1题解下载附件,file命令识别文件为64位,checksec命令查看程序保护情况,如图,有Canary和NX保护。在ida64中打开程序,程序的主要功能有两个:存储用户输入的字符......
  • 9.3 noip 模拟赛 1 题解
    noip模拟赛1题解目录noip模拟赛1题解\(\tolink\leftarrow\)A一步之遥退位计划退役以后重在参与\(\tolink\leftarrow\)A一步之遥构造题手玩了一下没有什么......
  • ARC146 部分题解
    A普及组题//byBalloons#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#definemprmake_pair#definedebug()cerr<<"Madoka"<<e......
  • P5914 [POI2004]MOS 题解
    题目传送门分析这是一道小学经典的数学题,对于这种求最短时间的题目,我们要认真考虑两组人员:首先,跑的快的人应当跑的最多,能者多劳。其次,跑的慢的人应当跑的最少,否则会拉......
  • CF1389B题解
    题目传送门题目分析首先,这道题比较的简单,是一道较为标准的dp,虽说有大佬说可以用贪心做,但本蒟蒻不会。首先,\(0\leqz\leq\min(5,k)\)所以我们可以开一个二维dp,......
  • 【题解】「COCI 2018.10」Teoretičar
    传送门题目大意有一个二分图,构造一种对边的染色方案,使得没有两个颜色相同的边共顶点。假设对于给定二分图的答案是\(C\),记\(X\)是大于等于\(C\)的最小的\(2\)的......
  • 「题解」Longge 的问题
    原题目链接:Link。虽然已经被A穿了但还是写一下。\[\sum_{i=1}^n\gcd(i,n)=\sum_{d\vertn}\sum_{i=1}^n[\gcd(i,n)=d]\]这一步显然,因为\(\forall\gc......
  • P2858 [USACO06FEB]Treats for the Cows G/S 题解
    [USACO06FEB]TreatsfortheCowsG/S[USACO06FEB]TreatsfortheCowsG/S题目描述FJhaspurchasedN(1<=N<=2000)yummytreatsforthecowswhogetmoneyfo......
  • P1005 [NOIP2007 提高组] 矩阵取数游戏 题解
    luogu原题传送门[NOIP2007提高组]矩阵取数游戏题目描述帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的\(n\timesm\)的矩阵,矩阵中的每个元素\(a_{i,j}\)均为非......
  • P4363 [九省联考 2018] 一双木棋 题解
    一道状压dp题,我写的记忆化搜索。注意到这道题已经下子的区域和未下子的区域有一条轮廓线分割,因此考虑右上到左下记纵向为1,横向为0,状压一下,然后顺着记忆化搜索(有点类似......