[10.12模拟赛] 老大 题目描述 因为 OB 今年拿下 4 块金牌,学校赞助扩建劳模办公室为劳模办公室群,为了体现 OI 的特色,办公室群被设计成了树形(n 个点 n − 1 条边的无向连通图),由于新建的办公室太大以至于要将奖杯要分放在两个不同的地方以便同学们丢硬币进去开光,OB 想请你帮帮他看看奖杯放在哪两个办公室使得在任意一个在劳模办公室做题的小朋友能最快地找到奖杯来开光. 一句话题意:给出一个 n 个点的树,在两个合适且不同的点放上奖杯,使得每个点到最近的奖杯距离最大值最小. 输入…
树的直径: 利用了树的直径的一个性质:距某个点最远的叶子节点一定是树的某一条直径的端点. 先从任意一顶点a出发,bfs找到离它最远的一个叶子顶点b,然后再从b出发bfs找到离b最远的顶点c,那么b和c之间的距离就是树的直径. 用dfs也可以. 模板: ; int head[N]; int dis[N]; bool vis[N]; ,b,mxn=; struct edge { int to,w,next; }edge[N]; void add_edge(int u,int v,int w) { e…
原题: ZOJ 3684 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3684 题意: 给你一棵树,树的根是树的中心(到其他点的最远距离最小).现在你要破坏所有叶子节点到根节点的连通,每条边破坏都需要一定能量.你有一个能量为power的武器,能破坏能量小于等于power的任何路.求最少需要的power. 解法参考博客:http://blog.csdn.net/gzh1992n/article/details/86511…
中文题面,给出一个图,问能不能成环,如果可以就输出YES.否则输出该树的直径. 这里的判环我们用路径压缩的并查集就能很快的判断出来,可以在输入的同时进行判断.这题重点就是求树的直径. 树直径的性质可以参考https://blog.csdn.net/pi9nc/article/details/12394117   实现在代码求法上的就是: 假设 s-t这条路径为树的直径,或者称为树上的最长路 从任意一点u出发搜到的最远的点一定是s.t中的一点,然后在从这个最远点开始搜,就可以搜到另一个最长路的端点…
题意:有两个小孩玩游戏,每个小孩可以选择一个起始点,并且下一个选择的点必须和自己选择的上一个点相邻,问两个选的点权和的最大值是多少? 思路:首先这个问题可以转化为求树上两不相交路径的点权和的最大值,对于这种问题,我们有两种想法: 1:树的直径,受之前HDU多校的那道题的启发,我们先找出树的直径,然后枚举保留直径的哪些部分,去找保留这一部分的最优解,去更新答案. 代码: #include <bits/stdc++.h> #define INF 1e18 #define LL long long…
好久没做过这么恶心的DP题了 题面 题面很简单,有一个计算式,由+号.*号.括号和小于10的正整数组成,现在所有的+和*(由于属于违禁词而)都被-号给和谐掉了,现在要求所有可能的原计算式的结果之和. 你知道的信息:计算式总长度 n ∈ [ 1 , 1 0 5 ] n\in[1,10^5] n∈[1,105](其中保证-号总数 m ≤ 2500 m\leq2500 m≤2500),原计算式的+号总数 k ∈ [ 0 , m ] k\in[0,m] k∈[0,m] ,被和谐后的计算式(含括号). 题…
LINK:网络收费 还是自己没脑子. 早上思考的时候 发现树形dp不可做 然后放弃治疗了. 没有合理的转换问题的模型是我整个人最大的败笔. 暴力也值得一提 爆搜之后可以写成FFT的形式的计算贡献的方法 连图都不用建出来. 不是传统的树形dp 因为子树的状态影响之后的决策 并且从下至上的话需要状压所有点的状态 从上之下的话代价难以统计. 观察图中的这张表格 容易发现有规律的事情 当 na<nb时 有A的一定付出代价 两个A的话就两倍 一个A的话就一倍 B的话不要代价. 容易转换成上述模型 于是 这…
大致题意:在某个点派出两个点去遍历全部的边,花费为边的权值,求最少的花费 思路:这题关键好在这个模型和最长路模型之间的转换.能够转换得到,全部边遍历了两遍的总花费减去最长路的花费就是本题的答案,要思考.并且答案和派出时的起点无关 求最长路两遍dfs或bfs就可以,从随意点bfs一遍找到最长路的一个终点,再从这个终点bfs找到起点 //1032K 79MS C++ 1455B #include<cstdio> #include<iostream> #include<cstrin…
[10.18模拟赛] 序列 题目描述 山山有一个整数序列s1,s2,-,sn,其中1≤si≤k. 求出有多少个准确移除m个元素后不同的序列.答案模(1e9+7) 输入 输入包括几个测试用例,并且由文件结束终止. 每一个测试用例的第一行包含整数n,m和k. 第二行包含n个整数,即s1,s2,-,sn. 输出 对于每一个测试用例,输出一个表示结果的整数. 样例输入 3 2 2 1 2 1 4 2 2 1 2 1 2 样例输出 2 4 提示 \(1 ≤ n ≤ 10^5:1 ≤ m ≤ min{n -…
容易想到二分. 看到第一个条件容易想到缩点. 第二个条件自然是分段 然后让总和最小 容易想到dp. 缩点为先:我是采用了取了一个前缀最小值数组 二分+并查集缩点 当然也是可以直接采用 其他的奇奇怪怪的做法. 二分为重 发现变成了dp使得总a值尽可能小的问题. 方程为 f[i]=min(f[j]+max(j+1~i)a[k]); 这个问题容易使用线段树优化dp来解决. 单调栈维护决策区间修改即可.不过被卡常了 只有90points const int MAXN=100010; ll n,m,top…