DAY2 B组
T1
2676. 调整 (Standard IO)
Description
已给定一个 N 个点 M条边的有向图,点编号为 1到N,第i 条边为(ui,vi) ,
权值为wi。你可以进行一次操作,使得任意一条边的权值变成任意非负整数。要
求进行尽量少的操作次数,使得点 1到点N 的最短路径长度变成c。
题目保证,c小于在未进行任何操作之前的原图中 1到N 的最短路长度。
Input
输入文件tweak.in 第一行三个整数,N,M和c
接下来M行,每行一条边的信息 ui,vi和wi,第i 行的表述第i 条边的信息。
保证不会有自环存在,对于不同的 i 和j, (ui,vi)不同于(uj,vj) 。
Output
输出文件 tweak.out 一行一个整数,要进行最少多少次操作才能使得最短路
长度变为c。
Sample Input
3 3 3 1 2 3 2 3 3 1 3 8
Sample Output
1
Data Constraint
Hint
将边 1,3的权值修改为 2就可以了。
N≤100
M≤1000
0≤c≤100000
0≤wi≤10000
30%数据满足M≤20
50%的数据满足 M≤70
一看到题我想到的是求最短路,然后记录路径从大到小排序,从最大的开始删,用计数器记录次数,然而很快就被旁桌推翻了。(旁桌说这可能是dp,我说T1就dp不可能,后文打脸)
想法如下:
如图,若求最短路结果是从1—〉2,2—〉3,长度为6,若要将最短路改为1,答案是2,但可以直接从1—〉3,答案为1。
最后还是硬着头皮交,就过了一个点。
dalao说是dp(真香)。然而也没听懂。等懂了回来补代码。
看一下今天高分(lh)的题解(我是真的写不出来)
第一遍看完有点感觉了,但是不会实现。
T2
2677. 树A (Standard IO)
Description
已知无向连通图G由N个点,N-1条边组成。每个点有给定权值。现有M个操作,操作分为2种:操作1,将某点权值更改;操作2,询问从点A至点B路径上所有点的权值和。
Input
每个输入文件中仅包含一个测试数据。
第一行包含两个整数N,M。
第二行至第N行每行包含2个整数,A、B,表示节点A与节点B有一条边相连。
第N+1行包含N个整数,表示第N个点的初始权值。
第N+2行至第N+M+1行每行包含三个整数,K、A、B(若K=1,表示将点A权值改为B;若K=2表示询问点A至点B路径上所有点的权值和)
Output
输出文件若干行,分别对应每次操作2的答案。
Sample Input
3 2 1 2 1 3 1 2 3 2 1 3 2 2 3
Sample Output
4 6
Data Constraint
Hint
对于60%的数据,1<=N,M<=1000
对于100%的数据,2<=N<=30000;0<=M<=200000
(0706)
因为有更改权值和问讯,第一个想到的是树状数组。然而想了想感觉不会这么难(其实不会打)就放弃了。打了一个简单的搜索,人生第一次加上了记忆化和小剪枝,过了样例觉得50左右,然而出来以后只有9.1。
仍然是dalao讲题(hin迷)讲到重儿子,重边,马上baidu。
仍然不会,等研究出来补码。
(0707老师又讲了一遍才清楚,早上来写题解qwq)
注意这道题存图时要用邻接链表,(若用邻接矩阵空间太大,并且记录dfs序的时候也会方便很多)
int x,y; for(int i=1;i<n;i++){ cin>>x>>y; lb[x].push_back(y); lb[y].push_back(x); }
询问
询问中要用到的知识点:前缀和,LCA(最近公共祖先)
设一个树上前缀和数组,表示节点到根的所有点的权值和。(如h[2]=1+2=3),先判断被询问的两个点是否直接是一条直链(如询问1—>2)。
若为直链,输出它们前缀和的差,若不为一条直链,找出它们的lca,根据容斥原理,求出它们的权值和。如图,4到5的权值和=sum[4]+sum[5]-2*sum[2]。
更改
更改中要用到的知识点:DFS序,树状数组
具体还不太明白...
T3
2678. 树B (Standard IO)
Description
已知无向连通图G由N个点,N-1条边组成。每条边的边权给定。现要求通过删除一些边,将节点1与另M个指定节点分开,希望删除的边的权值和尽量小,求此最小代价。
Input
每个输入文件中仅包含一个测试数据。
第一行包含两个整数N,M。
第二行至第N行每行包含3个整数,A、B、C,表示节点A与节点B有一条边相连,边权为C。
第N+1行至第N+M行每行包含一个整数X,表示要求与节点1分开的节点。
Output
输出文件仅包含一个整数,表示最小代价。
Sample Input
3 2 1 2 3 1 3 5 2 3
Sample Output
8
Data Constraint
Hint
对于20%的数据,2<=N<=10
对于100%的数据,2<=N<=10^6
T4
2679. 跨时代 (Standard IO)
Description
所以小G作为铁杆歌迷,也计划带着小Y去看周杰伦的演唱会。 演唱会当然要圈出一个空地,然后才能布置道具。 演唱会的第一站,公司临时跟当地的消防局借了n个栏杆,打算用这n个栏杆围出一个矩形。而麻烦的是,这些栏杆有长有短,这就给围场地带来了一些难度。 所以公司聘请你来写一个程序,计算用这n个栏杆做多围出面积多大的矩形。
(注:必须要刚好围成一个矩形,即不能出现多余的边长,且不能切断栏杆,但所给栏杆不一定要全部用上)
Input
第二行n个正整数,表示每根栏杆的长度li。
Output
Sample Input
4 1 1 1 1
Sample Output
1
Data Constraint
Hint