HDU 5385 The path(貪心 構造)

2021-07-07 06:50:47 字數 879 閱讀 5794

題意:給出乙個有向有環圖,第i個點距離1號點的最短路距離記為d(i),要求給每條邊賦值, 使得 d(1)d(x+1)>.....d(n)。

思路:貪心。對於乙個圖,如果我們知道每個點的d值,那麼我們可以根據d值來給邊賦值。

現在的問題是求每個點的d值,可以預設每個點的d是1到n-1不等,用乙個集合儲存當前可到達的點的集合,然後用兩個指標從左和右向中間掃,給每個點賦乙個d值,然後遍歷所有邊給邊賦值即可。

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps 1e-6

#define ll long long

#define pii pair//#pragma comment(linker, "/stack:1024000000,1024000000")

using namespace std;

const int maxn = 100100;

//const int inf = 0x3f3f3f3f;

struct edge edge[maxn*2];

int head[maxn], tot;

int n, m, dis[maxn];

sets;

void addedge(int u, int v)

void init()

void work()

}int main()

work();

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

} return 0;

}



hdu1285 hdu4857 拓撲排序

一 原題內容 problem description 有n個比賽隊 1 n 500 編號依次為1,2,3,n進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即p1贏p2,用p1,p2表示,排名時p1在p2之前。現在...

樹狀陣列 hdu2689 hdu2838

題意 給定乙個正整數n,和乙個1 n的乙個排列,每個數可以和旁邊的兩個數的任意乙個交換,每交換一次總次數就要加一,問將這個排列轉換成乙個遞增的排列需要多少次交換?題意可以轉換成求這個排列的逆序對數。include include include include using namespace std...

hdu2068 hdu 2049 錯排組合

這部分涉及的知識為組合數和錯排 參考 比較簡單 hdu2068 include include int64 c int n,int m 組合數公式 return u d main sum for i 3 i 13 i f i i 1 f i 1 f i 2 while scanf d n n 另一題...