
图论
入门
ddgo
给我高高飞起来啊!(ACM退役,转JAVA后端了)
展开
-
Codeforces Round #660 (Div. 2) D
由题可以构造出一个有向路径,对于一个路径,只要我们从起点开始走,我们就可以尽可能的得到最大的值。若前面一个是负数,则我们把它最后选取最为合适,因为这样继续跟着这条路径选下去,会导致后面的数越变越小。直接拓扑排序正数存到res1,负数存到res2.对于res2,为了自己的贪心成立,对于每一个负数,可能会有它前面的一个点是它的父父父结点,我们不能让这种情况发生,因为发生了,这个数还会变的更小,所以我们直接逆序输出即可。代码:#define IOS ios::sync_with_stdio(false)原创 2020-08-29 22:15:23 · 109 阅读 · 0 评论 -
hdu 6867 Tree
题目地址题意,给一个有向树,判断加一个有向边之后,使得(x,y)对最大,x,y表示x能到达y。思路,对于根节点,它能到达每一个节点(最多),所以我们可以把叶子节点和根节点链接起来形成一个环,就会得到尽可能多的(x,y)。默认将自己也作为子树的一个节点.(后面处理防止(x,x)重复计算)链接后,对于叶子节点,它能够多到达所有的不是它子树的节点,对于叶子节点的父节点,它能多到达所有的不是它子树的结点,…。所以可以用dfs求出 每个节点子树的大小,再dfs求出某条到叶子节点路径的 ∑(n−siz[])原创 2020-08-19 12:10:07 · 173 阅读 · 0 评论 -
2020牛客多校第九场 K
题意: a 先沿最近路线靠近 b,然后a再远离b,同时b再去追a因为有n个点n-1条边,所以是一颗树。 求出 a开始的位置需要dfs(inv = 1)去处理。之后分别把a开始的位置到每个点的时间求出来,b到每个点的时间求出来。再用dfs求出max.不过,此max非披max,当有一个节点两个在同一时间都到达的时候,那么那个节点之后的点就不能再继续扩展了,因为已经相遇了。对于dfs_ans函数第一个参数是sa而不是n,因为之前我们让相遇节点之后不被扩展,而以n为起点开始查找,会优先找到sa起点往n靠近的点原创 2020-08-15 23:13:41 · 134 阅读 · 0 评论 -
1192. 奖金(拓扑排序)
题目:由于无敌的凡凡在2005年世界英俊帅气男总决选中胜出,Yali Company总经理Mr.Z心情好,决定给每位员工发奖金。公司决定以每个人本年在公司的贡献为标准来计算他们得到奖金的多少。于是Mr.Z下令召开 m 方会谈。每位参加会谈的代表提出了自己的意见:“我认为员工 a 的奖金应该比 b 高!”Mr.Z决定要找出一种奖金方案,满足各位代表的意见,且同时使得总奖金数最少。每位员工...原创 2020-04-08 17:35:39 · 586 阅读 · 0 评论 -
uva 437
题意和思路紫书上都有,(DAG上的最长路)关键是建立图模型。邻接链表:#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#include<bits/stdc++.h>#define int long longusing namespace std;typedef pair<int,int> pii;typedef long long ll; const int INF = 0x3f3f3f3原创 2020-07-31 10:40:34 · 133 阅读 · 0 评论 -
codeforces 660 div2 C
题意: 给你一个图(树),让你判断每个城市的的幸福值是否正确。幸福值计算为 h = good - bad 开心的减去不开心的。好心情的人可以变坏,但是坏心情的人就不能变好,在城市内不能变化。对于每一个城市,我们可以知道:happy_man + bad_man = total_number(总经过的人)happy_man - bad_man = h(幸福值)化简得 happy_man = (total_number + h) / 2, bad_man = (total_number-happy_m原创 2020-07-31 23:49:03 · 151 阅读 · 0 评论