题解:P10537 [APIO2024] 九月

题意

在一个树上,在 \(k\) 天内有 \(n-1\) 个节点掉落,会有 \(m\) 个记录者记录掉落的情况,每一天每一个人会以任意的顺序记录当天的掉落情况,求出 \(k\) 的最大值。

思路

根据题意可以得到,判断区间 \([l,r]\) 是否合法,有两个必要的条件。

  • 区间 \([l,r]\) 必须在 \(m\) 个人的记录集合中相等。
1 2 3
1 2 4

以上样例就不合法。

  • 区间 \([l,r]\) 删除后仍然可以构成一棵树。

第一个性质完全可以用 Hash 来判断。

第二个性质可以使用扫一圈判断每一个节点还有多少个节点未掉,最后判断一下即可。

AC code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n, m;
int solve(int nn, int mm, vector<int>FA, vector<vector<int>>SA) {
//初始化
n = nn - 1, m = mm;
int ans = 0;
vector<int>f(n + 1);
vector<vector<int>>s(m + 1, vector<int>(n + 1));
vector<vector<int>>p(m + 1, vector<int>(n + 1));
vector<pair<ll,ll >>has(m+1);
vector<vector<bool>>vis(m+1,vector<bool>(n+1));
vector<int>cnt(m+1); for (int i = 1; i <= n; ++i) f[i] = FA[i];
for (int i=1;i<= m; ++i) for (int j=1;j<=n;++j) s[i][j]=SA[i-1][j-1];
for(int i=1;i<=m;++i) for(int j=1;j<=n;++j) ++p[i][f[j]]; for (int j = 1; j <= n; ++j) {
//判断构成的集合相等
for (int i = 1; i <= m; ++i) has[i].first += s[i][j], has[i].second += (ll)s[i][j] * s[i][j],vis[i][s[i][j]]=1;//Hash
bool flag = 1;
pair<ll, ll>q = has[1];
for (int i = 2; i <= m; ++i) {
if (has[i] != q) {
flag = 0;
break;
}
} //判断是否可以构成一棵树
for (int i = 1; i <= m; ++i) if (p[i][s[i][j]]) ++cnt[i];
for (int i = 1; i <= m; ++i) {
--p[i][f[s[i][j]]];
if (!p[i][f[s[i][j]]] && vis[i][f[s[i][j]]]) --cnt[i];
} for (int i = 1; i <= m; ++i) flag &= !cnt[i];
if (flag) ++ans;//全部符合
}
return ans;
}

题解:P10537 [APIO2024] 九月的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. AI绘图之Midjourney初体验

    Midjourney (MJ) 使用笔记 最近尝试了 Midjourney 绘图,简单记录下使用流程. 注册及登陆 首先是账号注册和登陆,基本上就是一路下一步,唯一需要注意的是加入MJ频道,具体流程为 ...

  2. uniapp 返回顶部

    <template> <view> <view class="btn" @tap="toTop" :style="{'d ...

  3. k8s——pod探针

    探针 简单理解: 容器内应用的检测机制,根据不同的探针来判断容器应用当前的状态 为什么会需要探针 # 情况一 现在有一个商品的微服务,跑着跑着突然内存溢出,程序崩掉了,外面的pod虽然在,但是也相当于 ...

  4. openstack nova 报错

    openstack compute service list The server is currently unavailable. Please try again at a later time ...

  5. (八十八)c#Winform自定义控件-转子

    官网 http://www.hzhcontrols.com/ 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kw ...

  6. ABC346

    D 枚举是哪一位相同,情况为 \(00\) 还是 \(11\),然后用前缀和和后缀和求一下即可. \(pre_{j,i}\) 表示第一位为 \(j\),前 \(i\) 位的每两个相同的字符均不相同的情 ...

  7. 腾讯手游助手 WIN11 蓝屏 DPC_WATCHDOG_VIOLATION

    DPC_WATCHDOG_VIOLATION 退出QQ,或者下载最新版本QQ.

  8. Linux实时查看Java接口数据

    1.Linux实时查看Java接口数据的方法 在Linux系统中实时查看Java接口数据通常涉及几个步骤: (1)编写Java应用程序:首先,我们需要有一个Java应用程序,它暴露了一个或多个HTTP ...

  9. 为什么Python的多线程是假的呢?

    https://www.zhihu.com/question/23474039/answer/269526476

  10. CLR via C# 笔记 -- 托管堆和垃圾回收(21)

    1. 访问一个资源所需的步骤 1). 调用IL指令newobj,为代表资源的类型分配内存(一般使用C# new 操作符来完成). 2). 初始化内存,设置资源的初始状态并使资源可用.类型的实例构造器负 ...