洛谷P1963 變換序列

2022-05-20 12:47:04 字數 549 閱讀 3106

題目大意:對於乙個順序序列,求乙個合法置換,可以滿足一些約束,若存在多個合法置換,則輸出字典序最小的乙個置換。

題解:對於序列的置換是否有解的問題,可以和二分圖的完美匹配相關聯。由於是字典序最小,顯然需要貪心考慮。在匈牙利演算法執行的過程中,對於每個點來說,可以優先匹配符合條件的最小的點;對於左邊點集來說,可以從後往前進行匹配,這樣可以保證字典序小的點更可能搶到字典序小的點。

**如下

#include #define pb push_back

#define all(x) x.begin(),x.end()

using namespace std;

const int maxn=1e4+10;

vectorg[maxn];

int n,match[maxn],t[maxn];

bool vis[maxn];

void read_and_parse()

if(retfor(int i=0;ifor(int i=0;iputs("");

}int main()

洛谷 P1963 NOI2009 變換序列

先 dalao部落格 建圖並沒有什麼難的,但是關鍵在於如何使字典序最小。乙個很顯然的想法是先求出乙個完美匹配,然後從x集合的第乙個元素開始,如果該元素匹配的較小的乙個,那麼繼續,如果是較小的乙個,那麼強制把它轉換成較小的乙個,然後在其之後,尋找增廣路,如果能找到的話,就修改,如果沒有,取消修改。然而...

洛谷 P1410 子串行

這題乍一看毫無思路。顯然不可能窮舉長度為n 2的嚴格遞增子串行。不過聯想到noip1999 普及組 的飛彈攔截的第二問,就有思路了。這題其實與它的第二問差不多,只要算出該序列的最大非公升子串行長度l,判斷一下是否大於2即可。1.假如l 2,顯然乙個嚴格遞增子串行至多包含非公升子串行的乙個元素,2個子...

洛谷 P1410 子串行

給定乙個長度為n n為偶數 的序列,問能否將其劃分為兩個長度為n 2的嚴格遞增子串行,輸入格式 若干行,每行表示一組資料。對於每組資料,首先輸入乙個整數n,表示序列的長度。之後n個整數表示這個序列。輸出格式 同輸入行數。對於每組資料,如果存在一種劃分,則輸出 yes 否則輸出 no 輸入樣例 1 6...