NOIP校內模擬 航班

2021-08-29 18:45:26 字數 2001 閱讀 1473

【描述】

l因為業務繁忙,經常會到處出差。因為他是航空公司的優質客戶,於是某個航空

公司給了他乙個優惠券。

他可以利用這個優惠券在任何乙個國家內的任意城市間免費旅行,當他的路線跨國

才會產生費用。 l有乙個航空公司的**表與航線。而且每個城市出發都能到所有的城

市, 2 個城市間可能有不止乙個航班,乙個國家內的 2個城市間一定有不同的路線,但是

不同國家的城市間只有一條路線。 l想知道從每個城市出發到產生費用最多的城市,不過

你不能重複在乙個航班上飛來飛去產生費用,不行沿最少的費用路線飛行。

【輸入】

第一行,兩個整數 n,m,表示 n 個城市, m 條航線。

接下來 m 行,每行三個整數 a,b,c,表示城市 a,b 之間有一條費用為 c 的航

線。【輸出】

共 n 行,第 i 行為從城市 i 出發到達每個城市額外費用的最大值。

【sample input】

6 61 4 2

1 2 6

2 5 3

2 3 7

6 3 4

3 1 8

【sample output】

4 4 4 6 7 7

【解釋】

有四個國家,包含的城市分別為 ,,,。

從城市 1 出發到達城市 6,乘坐(1,3)(3,6)兩個航班費用最大, (1,3)在國內為免費航

班, (3,6)的費用為 4,所以從 1 出發的最大費用為 4。

【資料規模】

對於 40%的資料 1<=n<=1000,1<=m<=1000

對於 100%的資料 1<=n<=20000,1<=m<=200000

首先,在乙個國家的城市肯定屬於同乙個邊雙聯通分量,因此我們對於無向圖跑一遍tarjan,然後縮點

現在整個圖變成了一顆樹,相當於就是讓我們求乙個點在樹上的最長距離是多少

先求出樹的直徑,設端點為a,b,那麼每個點的最長距離就是max(dis[a],dis[b])

可以用反證法來證明,假如最長距離是到點c,那麼樹的直徑就會變化了

**很好實現,只需兩發dfs即可

#include#define n 20005

#define m 200005

using namespace std;

struct edge

edge[2*m];

int first[n],tot;

int n,m;

inline void addedge(int x,int y,int z)

stack sta;

bool insta[n];

int dfn[n],low[n],sign,num,belong[n];

void dfs(int now,int fa)

else if(insta[vis]) low[now]=min(low[now],dfn[vis]);

}if(dfn[now]==low[now])

while(top!=now);

}}struct scc

scc[2*m];

int head[n];

inline void addscc(int x,int y,int z)

int maxdis,disa[n],disb[n],point;

void dfs1(int now,int fa)

dfs1(vis,now);

}}void dfs2(int now,int fa)

}int main()

for(int i=1;i<=n;i++) if(!dfn[i]) dfs(i,0);

tot=0;

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

}dfs1(1,-1);

memset(disa,0,sizeof(disa)),maxdis=0;

dfs1(point,-1);

dfs2(point,-1);

for(int i=1;i<=n;i++) cout<

NOIP校內模擬 航班

描述 l因為業務繁忙,經常會到處出差。因為他是航空公司的優質客戶,於是某個航空 公司給了他乙個優惠券。他可以利用這個優惠券在任何乙個國家內的任意城市間免費旅行,當他的路線跨國 才會產生費用。l有乙個航空公司的 表與航線。而且每個城市出發都能到所有的城 市,2 個城市間可能有不止乙個航班,乙個國家內的...

NOIP校內模擬 塔

我們可以這樣考慮 x 必定是由若干個立方數拼起來的 因此我們可以逆著求 只需關心每次取哪個立方數即可 設a是最大的 a 使得 a 3 不超過 m 分析樣例 我們發現在第一次的時候 就可以取a或者a 1 那第一次取a 2 a 3.行不行呢?1.用 a,剩下m a 3 2.用 a 1,x 最大為 a 3...

NOIP校內模擬 階乘

描述 有n個正整數a i 設它們乘積為p,你可以給p乘上乙個正整數q,使pq剛好為正整數m的階乘,求m的最小值。輸入共兩行。第一行乙個正整數n。第二行n個正整數a i 輸出共一行 乙個正整數m。樣例輸入16 樣例輸出3提示 樣例解釋 當p 6,q 1時,pq 3!資料範圍與約定 對於10 的資料,n...