洛谷 P1963 NOI2009 變換序列

2022-05-10 06:00:35 字數 739 閱讀 7039

先%dalao部落格

建圖並沒有什麼難的,但是關鍵在於如何使字典序最小。

乙個很顯然的想法是先求出乙個完美匹配,然後從x集合的第乙個元素開始,如果該元素匹配的較小的乙個,那麼繼續,如果是較小的乙個,那麼強制把它轉換成較小的乙個,然後在其之後,尋找增廣路,如果能找到的話,就修改,如果沒有,取消修改。

然而這樣的時間複雜度比較高,我們可以採取一種比較高效的貪心。

倒著匹配

即從x集合的最後乙個元素開始匹配,最後得到的就是字典序最小的。

那麼為什麼這樣是對的呢?

我們可以發現,總有一些匹配確定的,那麼除去這些匹配,剩下的就是一些環,從後往前匹配,可以達到最優

#include #include #include #include #include using namespace std;

int init()

while(c>='0'&&c<='9')

return rv*fh;

}int n,g[10005][2],match[10005];

bool f[10005];

bool hungarian(int u)

} }return 0;

}int main()

if(ans==n)

for(int i=0;i}else printf("no answer\n");

return 0;

}

洛谷P1963 變換序列

題目大意 對於乙個順序序列,求乙個合法置換,可以滿足一些約束,若存在多個合法置換,則輸出字典序最小的乙個置換。題解 對於序列的置換是否有解的問題,可以和二分圖的完美匹配相關聯。由於是字典序最小,顯然需要貪心考慮。在匈牙利演算法執行的過程中,對於每個點來說,可以優先匹配符合條件的最小的點 對於左邊點集...

洛谷P1758 NOI2009 管道取珠

題目 管道取珠是小x很喜歡的一款遊戲。在本題中,我們將考慮該遊戲的乙個簡單改版。遊戲畫面如圖1所示 圖1 遊戲初始時,左側上下兩個管道分別有一定數量的小球 有深色球和淺色球兩種型別 而右側輸出管道為空。每一次操作,可以從左側選擇乙個管道,並將該管道中最右側的球推入右邊輸出管道。例如 我們首先從下管道...

洛谷 P4159 SCOI2009 迷路

如果邊權為 1 11,則是簡單的矩陣快速冪加速dp遞推方程,又因為邊權並不大,所以考慮拆點,新圖中邊權均為 1 11,將每個點暴力拆成相連的 9 99 個點,對於原先某條邊 u,v,w u,v,w u,v,w 可以轉化為 u uu 拆成的點中第 w ww 個連向 v vv 拆成的點中第 1 11 個...