知道做法竟然可以 \(\tt \color\) 3發,真是沒誰了。
題面遠長於題解系列。
有一天,乙個名叫順旺基的程式設計師從石頭裡誕生了。又有一天,他學會了氣泡排序和獨立集。在乙個圖里,獨立集就是乙個點集,滿足任意兩個點之間沒有邊。於是他就想把這兩個東西結合在一起。
眾所周知,獨立集是需要乙個圖的。那麼順旺基同學創造了乙個演算法,從氣泡排序中產生乙個無向圖。
這個演算法不標準的偽**如下:
//輸入:點數n,1到n的全排列a
//輸出:乙個點數為n的無向圖g
void bubblesortgraph(n,a)
輸出圖g。
} //結束。
那麼我們要算出這個無向圖 g 最大獨立集的大小。但是事情不止於此。順旺基同學有時候心情會不爽,這個時候他就會要求你再回答多乙個問題:最大獨立集可能不是唯一的,但有些點是一定要選的,問哪些點一定會在最大獨立集裡。今天恰好他不爽,被他問到的同學就求助於你了。
a是全排列。
\(1\le n\le 10^5.\)
資料太大,我們不能把圖建出來,所以直接考慮哪些點之間沒有邊。
直接可以得到結論是上公升子串行,所以第一問的答案就是最長上公升子串行的長度。
第二問直接正反各跑一邊即可。
時間複雜度 \(o(n\log_2n)\)。
精簡
//12252024832524
#include #define tt templateusing namespace std;
typedef long long ll;
const int maxn = 100005;
int n,ans;
int a[maxn],pre[maxn],suf[maxn],dp[maxn],vis[maxn];
ll read()
while(c >= '0' && c <= '9')
return x * f;
}tt void put1(t x)
tt void put(t x,char c = -1)
tt t max(t x,t y)
tt t min(t x,t y)
tt t abs(t x)
int main()
ans = cnt; cnt = 0;
for(int i = n;i >= 1;-- i)
put(ans,'\n');
for(int i = 1;i <= n;++ i)
if(pre[i]+suf[i] > ans) ++vis[pre[i]];
for(int i = 1;i <= n;++ i)
if(pre[i]+suf[i] > ans && vis[pre[i]] <= 1) put(i,' ');
return 0;
}
重慶市NOIP模擬賽 業務
mr h 謀得乙份兼職 貨車司機,從此以後他將會開著貨車穿行在 c 國的各大城市之間。c 國中有 n 座城市 編號為 1 n 並且有 m 條雙向公路,每條公路連線兩座不同的城市。貨車 從任意一座城市出發都可以抵達任意另一座城市。在每條公路上,都有乙個收費站,通過的車輛需要 交納一定過路費。可能有多條...
總結 20151017重慶市NOIP模擬賽
這場比賽有點難,考完了之後感覺要爆零了 o 這次比賽還算不錯,發揮出了正常水平 木有犯sb錯誤 主要是因為第一題亂yy寫了乙個不知道比標程慢了無數倍的 然後a掉了。藐似第一題比較關鍵,之後的比賽不能在第一題上掉以輕心。預設第一題最簡單o o 這次在比賽的前幾分鐘看了一下題目,在做的過程中先跳過了第二...
noip模擬賽 密碼
表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...