火車運輸 NOIP 2013 提高組 Day 1

2021-08-09 14:56:26 字數 1752 閱讀 4171

本題 kruskal+倍增lca

wa了三次 t_t

總結出一些注意事項:

1. 一定要想明白每一部分是求最大值還是最小值!!!(wa 1)

2. 注意操作順序,別把要用的變數的數值改沒!!!(wa 2)

3. 仔細看題,如本題讓「」貨車不能到達目的地,輸出-1「」,而貨車載重為零則應輸出0!!!!!!(wa 3)

#include

#include

#include

#include

using

namespace

std;

struct edg

edge[50004];

int n,m;

int q;

bool cmp(edg a,edg b)

int min(int a,int b)

void unionn(int a,int b)

int to[30004],val[30004],nextt[30004],head[10004],cnt;

void add(int a,int b,int c)

int fa[10004][16];

int minn[10004][16];

int deep[10004];

void add_root()

}}int visited[10004];

void dfs(int pos,int pre,int step,int vv)

}}void swap(int &a,int &b)

int lca_min(int x,int y)

}if(x==y) return ans;

for(int i=15;i>=0;i--)

else

}ans=min(ans,minn[x][0]);

ans=min(ans,minn[y][0]);

return ans;

}int main()

sort(edge+1,edge+m+1,cmp);

for(int i=1;i<=n;i++) father[i]=i;

for(int i=1;i<=m;i++)

}memset(minn,0x3f,sizeof(minn));

add_root();

dfs(n+1,n+1,0,0);

for(int j=1;j<=15;j++)

}scanf("%d",&q);

for(int i=1;i<=q;i++)

return

0;}

附上幾組資料:

/*

5 85 4 1

4 2 3

5 3 4

3 1 6

5 1 6

4 2 0

4 2 0

1 2 9

51 5

4 31 4

4 13 4

*//*

5 52 5 3

5 3 0

1 2 9

3 2 0

4 2 8

53 2

2 13 4

5 21 2

*//*

6 85 3 7

3 2 3

6 5 2

2 3 6

1 3 6

4 1 3

2 6 9

4 1 1

16 4

*/

火車運輸(NOIP2013)

傳送藥水 喝了這一壺傳送藥水,保你看了什麼題都覺得神清氣爽 這題不算水。首先想到,肯定需要跑一遍最大生成樹,因為我們需要盡可能大的限制。那麼,接下來就是求兩點之間最小限制。那麼就是我們就可以用求lca 最近公共祖先 來解決這個問題。所以就倍增好了。我們這裡倍增的有兩個陣列,乙個是祖先,另乙個是當前點...

NOIP 2013 提高組 貨車運輸

a 國有 n 座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。第一行有兩個用乙個空格隔開的整數 n,m,表示 a 國有 n 座城市和 m 條道路。接下來 m ...

NOIP2013提高組 貨車運輸

noip2013 提高組 day1 試題。a 國有 n 座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。第一行有兩個用乙個空格隔開的整數 n m,表示 a 國...