time 2018 9 27
題目大意:
資料範圍:
1
<=n
,m
<
=300000
0<=v
al
<
=1000
time limit 1000ms
memory limit 256mb
1<=n,m<=300000\\ 0<=val<=1000\\ \text\\ \text
1<=n
,m<=3
0000
00<=v
al<=1
000time limit 1000ms
memory limit 256mb
思路:
當把最長鏈的某條邊刪除後,所有的鏈將分為兩部分:
一部分為受該刪除邊影響的鏈;
另一部分為不受該刪除邊影響的鏈。
最長鏈鏈長減去所刪邊的邊權;
所刪邊左側不經過所刪邊的最長鏈長;
所刪邊右側不經過所刪邊的最長鏈長。
與最長鏈無公共邊(如上圖中的鏈$9-8-10 $),則不管怎麼刪邊,這些鏈的鏈長並不會改變,可以暫時先存下來。最後直接貢獻到答案中。
與最長鏈有公共邊(如上圖中的鏈6−2
−3−7
6-2-3-7
6−2−3−
7 ),則這就和樹是一條的情況差不多了,唯一不同的是,雖說這些鏈與最長鏈有公共邊,但它們有的邊是突出來的(如上圖中的邊$(6,2),(3,7) $)。但這並不影響計算,因為無論是怎樣刪邊,突出的那部分的值是不會變的,所以可以認為這條鏈是與最長鏈重合的,只是鏈長並不是實際邊的長度,而是原鏈長。
有一類資料為m=1且該鏈的起點與重點求和,需要特判#include
#define max4(x,y,z,w) max(max(x,y),max(z,w))
#define clr(x,y) memset(x,y,sizeof(x))
#define pf printf
#define sf scanf
#define for(x,y,z) for(int x=y;x<=z;x++)
#define dor(x,y,z) for(int x=y;x>=z;x--)
#define for_edge(x,y) for(int x=head[y];~x;x=edge[x].to)
#define read2(x,y) read(x),read(y)
#define read3(x,y,z) read(x),read(y),read(z)
#define db double
#define ll long long
using
namespace std;
const
int maxn=
3e5+5;
const
int p=(1
<<16)
-1;void
read
(int
&x)struct edgeedge[maxn<<1]
;int tot,head[maxn]
;void
add(
int x,
int y,
int z)
; head[x]
=tot;
}int n,m;
int dep[maxn]
,son[maxn]
,sz[maxn]
,top[maxn]
,dis[maxn]
,fa[maxn]
;void
dfs_init
(int u,
int f)
}void
dfs_top
(int u,
int tp)
}int
lca(
int x,
int y)
return dep[x]
>dep[y]
?y:x;
}struct node
}a[maxn]
;int eg[maxn]
;void
dfs(
int u,
int f)
}int f[maxn]
;bool mark[maxn]
;void
dfs_link
(int u,
int f)
}void
mark
(int s,
int e)
while
(s!=e);}
int v[2]
[maxn]
;voidup(
int s,
int e)
while
(s!=e);}
void
down
(int s,
int e)
while
(s!=e);}
int s,e,mx;
void
sort()
}int
main()
tot=0;
dfs_init(1
,0);
dfs_top(1
,1);
for(i,
1,m)a[i].rd
();sort()
;if(s==e)
dfs(s,0)
;mark
(s,e)
;int tmp=0;
for(i,
1,m)}up
(s,e)
;//處理字首
down
(s,e)
;//處理字尾
int ans=
2e9;
dowhile
(e!=s);pf
("%d"
,ans)
;}
NOIP2015Day2T3 運輸計畫
題解 二分答案。假設列舉到答案是xxx。找出所有長度大於x xx的鏈,那麼這些鏈上必須要放蟲洞,而且必須放在一條所有鏈都經過的邊上,否則必然有一條鏈的長度是大於x xx的。這個直接差分就能求出所有鏈都經過的邊,並且把最長的那條改為蟲洞,看看所有邊是否合法,則可判斷x xx是否可行。應該不是很難吧。比...
NOIP 2015 Day2 T3 運輸計畫
公元 2044 年,人類進入了宇宙紀元。公元 2044 年,人類進入了宇宙紀元。l 國有 n 個星球,還有 n 1 條雙向航道,每條航道建立在兩個星球之間,這 n 1 條航道連通了 l 國的所有星球。小 p 掌管一家物流公司,該公司有很多個運輸計畫,每個運輸計畫形如 有一艘物流飛船需要從 u i 號...
noip2015day1t2 資訊傳遞
把每個同學看成乙個點,傳遞關係看成一條邊,點數等於邊數,因此圖由若干個環或環鏈復合邊數等於點數的東西組成,不存在孤立鏈。在圖上,傳遞一輪後,每個點掌握沿邊前乙個點的資訊,傳遞x輪後,任意乙個點恰好掌握沿邊反向前進x條邊的路徑上的所有點的資訊,要聽到自己的資訊,也就是在環上走一圈。這樣就把題目抽象為找...