[Codeforces] 1027F. Session in BSU
題目連結: https://codeforces.com/problemset/problem/1027/F 我好笨QAQ 本題關鍵大概是想到可以把每個考試當做邊來看吧OAO(看了解才知道 假設知道這件事後,那其實就很簡單,當然對於每個連通元件分開處理,明顯的如果邊數較點數多,那一定無法構造出一個合法的結果。 接著當邊數跟點數一樣多的時候,一定存在解,因為他必定可拆成幾個環跟一些連接的邊,那這時這裡的答案就是點的最大值。 還有邊數是點數減一的時候,不難發現他是顆樹,然後答案會是次大值。 邊數是點數減二的時候則不可能出現,所以討論這幾種狀況就可以得到答案了。 #include <bits/stdc++.h>
using namespace std;
using lld = int64_t;
using PII = pair<int,int>;
#define PB push_back
#define FF first
#define SS second
#define ALL(x) begin(x), end(x)
#define SZ(x) (static_cast<int>(std::size(x)))
const int N = 2000000 + 5;
class LiSan{
private:
vector<lld> vv;
public:
template<typename... Args>
void insert(lld x, Args& ...oth){insert(x);insert(oth...);}
void insert(lld x){vv.PB(x);}
void done(){
sort(ALL(vv));
vv.resize(distance(vv.begin(), unique(ALL(vv))));
}
in...