NOI2009 變換序列

2022-05-10 21:58:15 字數 853 閱讀 9239

51 1 2 2 1

1 2 4 0 3

30%的資料中n≤50;

60%的資料中n≤500;

100%的資料中n≤10000。

二分圖匹配

匈牙利演算法的原理是衝突時替換

不過要求字典序最小,乙個點會連出2條邊,加邊先加入大的,這樣在匹配時就會先匹配小的

不過這是針對於鏈式前向星

然後如果i和j都匹配了t,且i

那麼顯然i配t更好,因為如果不這樣i就要配乙個更大的

所以要從後往前列舉

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7struct

node

8edge[50001

];11

int match[20001],head[20001],num,n,vis[20001],sum,ans[20001

];12

void add(int u,int

v)13

19bool dfs(int

x)20 32}

33}34return0;

35}36int

main()

37 49

for (i=n-1;i>=0;i--)

5055

if (sum

5660

for (i=0;i1;i++)

61 printf("

%d "

,ans[i]);

62 cout<1

];63 }

noi2009變換序列

2009年noi全國競賽 時間限制 1 s 空間限制 128000 kb 題目等級 大師 master 題解 description 對於n個整數0,1,n 1,乙個變換序列t可以將i變成ti,其中 ti 且ui 1 to n 1 任意x,y 定義x和y之間的距離d x,y min。給定每個i和ti...

NOI2009 變換序列

讀懂題意後發現這道題最主要是要求出字典序最小的排列,考察了匈牙利演算法的實質。首先對於 d i 的定義,我們可以解出可能的 t i 然後將 i 與 t i 連邊,求最大匹配。如果最大匹配 但是要求字典序最小。第一中方法在我 ac 後翻看題解而寫的。這個程式是根據匈牙利演算法的實質寫的。對於乙個待匹配...

NOI2009 變換序列

here 簡要題意就是給定乙個排列,每個元素有兩個對應關係,問你是否能將該排列轉換為另乙個排列,並使之字典序最小,如果不考慮字典序的話,這題就是裸的一道求二分圖完美匹配的題,那麼我們該如何考慮字典序呢?我們可以按字典序暴力列舉左邊的點與右邊的哪個點相匹配,再跑二分圖。實際上我們可以不這樣做,二分圖匹...