《陝西師範大學第九屆ACM程式設計競賽》

2022-06-19 20:09:13 字數 3010 閱讀 7392

a:其實並不是特別難的乙個題,想的太複雜了。

首先,我們把關係看成能夠傳遞的,那麼我們並查集統計連通塊之後。

可以發現,對於乙個連通塊,最優方案肯定只有1個人會沒朋友。

因為一直把和當前刪的點有關係的人的人刪進去,最後肯定就能刪完全部點,並且保證只有第乙個進去的人沒朋友。

因為要保證字典序最小,我們每次合併並查集的時候,都讓大的以小的為父節點,那麼最後這個集合的根,肯定就是這個集合裡最小的點。

那麼我們先把根都扔到小頂堆裡,然後在把和堆頂相鄰的沒刪的元素放入,因為小頂堆,會自己保證最小字典序。

//

author: levil

#pragma gcc optimize(2)

#pragma gcc optimize(3)#include

using

namespace

std;

typedef

long

long

ll;typedef

long

double

ld;typedef pair

pii;

const

int n = 1e6+5

;const

int m =1e4;

const ll mod = 998244353

;#define rg register

#define pi acos(-1)

#define inf 1e9

#define inm int_min

#define dbg(ax) cout << "now this num is " << ax << endl;

namespace

fastio

*///

file close.

inline int

read()

while(c >= '

0' && c <= '9')

return x*f;

}void print(int

x)

if(x > 9) print(x/10

); putchar(x%10+'0'

); }

}using

namespace

fastio;

void

fre()

vector

g[n];

intfa[n],vis[n];

int find(int

x)int

main()

priority_queue

,greater >q;

int cnt = 0

;

for(rg int i = 1;i <= n;++i) if(fa[i] == i) q.push(i),vis[i] = 1,cnt++;

vector

ans;

while(!q.empty())

}printf(

"%d\n

",cnt);

for(int i = 0;i < ans.size();++i) printf("

%d%c

",ans[i],i == ans.size()-1 ? '

\n' : '');

}system(

"pause

");

return0;

}

view code

c:考慮m個點裡選擇n-1個不同的點,然後除了最大的值外,其他值都能出現兩次,那麼有出現兩次的點有(n-2)種。

那麼重複出現的點在左右兩邊交換的時候,還是不改變。對於出現一次的點(除了最大值),它在最大值左右兩邊都是不同的方案。

那麼ans = c(m,n-1) * (n-2) * 2^(n-3)

//

author: levil

#pragma gcc optimize(2)

#pragma gcc optimize(3)#include

using

namespace

std;

typedef

long

long

ll;typedef

long

double

ld;typedef pair

pii;

const

int n = 2e5+5

;const

int m =1e4;

const ll mod = 998244353

;#define rg register

#define pi acos(-1)

#define inf 1e9

#define inm int_min

#define dbg(ax) cout << "now this num is " << ax << endl;

namespace

fastio

*///

file close.

inline int

read()

while(c >= '

0' && c <= '9')

return x*f;

}void print(int

x)

if(x > 9) print(x/10

); putchar(x%10+'0'

); }

}using

namespace

fastio;

void

fre()

ll f[n];

void

init()

ll quick_mi(ll a,ll b)

return

re;}

ll inv(ll n)

ll c(ll n,ll m)

intmain()

//system("pause");

return0;

}

view code

陝西師範大學第九屆ACM程式設計競賽水題

powered by ab in 局外人 忘了有比賽了,賽後就先補三個題吧。有三個做法,第一反應還是bfs bfsbf s,需要都跑一遍,所以就不用vis visvi s標記了。include using namespace std int x2 4 int y2 4 const int inf 0...

青島農業大學第九屆ACM程式設計競賽

題意 是否能夠把所有的書都放在兩個揹包裡。題解 貪心 c 版本一 author stzg language c include include include include include include include include include include include includ...

「浪潮杯」第九屆山東省ACM大學生程式設計競賽

aanagram 進入討論324 620 bbullet 進入討論56 213 二分 二分圖匹配 include include includeusing namespace std const int maxn 510 const int inf 0x3f3f3f3f int n,vis maxn...