題目:歸程&歸程+
思路:1、一種海拔 30』
求最短路。
詢問時,海拔==0,輸出0;否則輸出dist[v]。
2、鏈 15』
離散化。
預處理出不同海拔、每個點開始到起點的答案,查表輸出。
3、樹 10
樹上倍增。
4、kruskal重構樹+樹上倍增。
做kruskal時,在並查集路徑壓縮時,同時存下樹的心態。
即,在最小生成樹連邊時,新建乙個節點,權為邊權,作為兩節點的父節點。
然後再在重構樹上倍增求解。
**:
#include
using
namespace std;
#define read(x) scanf("%d",&x)
#define ll long long
#define inf (1ll<<60)
struct edge
edge
(int xx,
int yy,
int ww,
int vv)
bool
operator
<
(const edge& oth)
const};
struct pair
pair
(ll xx,ll yy)
bool
operator
<
(const pair& oth)
const};
#define maxnall 200000
#define maxmall 400000
int n,m;
int x[maxmall+5]
,y[maxmall+5]
,w[maxmall+5]
,v[maxmall+5]
;int q,k,s;
#define maxn30 200000
#define maxm30 400000
vector g30[maxn30+5]
;ll dist[maxn30+5]
;bool vis[maxn30+5]
;priority_queue que,emp;
void
makeclean30()
void
dijkstra30()
}}}void
slv30()
dijkstra30()
;for
(int i=
1;i<=q;i++)}
#define maxnlink 1500
#define maxwlink 4000
#define maxqlink 100000
int wlink[maxnlink+5]
,vlink[maxnlink+5]
;int qn[maxqlink+5]
,qv[maxqlink+5]
;map<
int,
int> mplink;
int cnt;
ll flink[maxnlink+5]
[maxwlink+5]
;ll slink[maxnlink+5]
;void
makecleanlink()
void
slvlink()
for(
int i=
1;i<=q;i++
)for
(map<
int,
int>
::iterator it=mplink.
begin()
;it!=mplink.
end();
++it)
for(
int i=
2;i<=n;i++
) vlink[i]
=mplink[vlink[i]];
for(
int i=
1;i<=q;i++
) qv[i]
=mplink[qv[i]];
for(
int i=
2;i<=n;i++
) slink[i]
=wlink[i]
+slink[i-1]
;for
(int d=
1;d<=cnt;d++)}
for(
int i=
1;i<=q;i++)}
#define maxn 200000
#define maxm 800000
#define intinf (1<<30)
struct node};
vector e;
int c;
node tr[maxm+5]
;int fa[maxm+5]
;int
find
(int x)
void
makeclean()
int anc[maxm+5]
[30];
intsrch
(int x,
int u)
return x;
}void
dfs(
int x)
if(tr[x]
.ch1)
dfs(tr[x]
.ch1);if
(tr[x]
.ch2)
dfs(tr[x]
.ch2);}
void
slv(
)dijkstra30()
;for
(int i=
1;i<=n;i++
)for
(int i=
0;isize()
;i++
)dfs
(c);
int lst=0;
for(
int i=
1;i<=q;i++)}
intmain()
read
(q),
read
(k),
read
(s);
if(is30)
else
if(n<=maxnlink&&m==n-1)
else
}return0;
}
洛谷P2018 訊息傳遞
巴蜀國的社會等級森嚴,除了國王之外,每個人均有且只有乙個直接上級,當然國王沒有上級。如果a是b的上級,b是c的上級,那麼a就是c的上級。絕對不會出現這樣的關係 a是b的上級,b也是a的上級。最開始的時刻是0,你要做的就是用1單位的時間把乙個訊息告訴某乙個人,讓他們自行散布訊息。在任意乙個時間單位中,...
洛谷P2018 訊息傳遞
由題意得這是一棵樹,而任何乙個已經接到訊息的人,都可以把訊息告訴他的乙個直接上級或者直接下屬,說明是一棵無根樹。本來以為要用什麼高階樹上演算法亂搞,結果發現 n leq 1000 這不是dfs就能水過嗎?實際上是個樹規 欽定乙個結點為根,我們在有根樹上做樹規。對於結點 x 他的狀態由他的子結點決定。...
洛谷P4491 HAOI2018 染色
題面 題解 首先這個 恰好 看著很不爽,換成 至少 設 f i 表示顏色個數為 s 的顏色至少有 i 個的方案數。考慮如何計算。1.m 個顏色選了 i 個,binom 2.i 個顏色選了恰好 s 個,其他的 m i 個顏色任選 frac i times fac n i s 3.剩下 n i s 個位...