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