不說。
如果x能勝y,則x往y連一條邊。
如果乙個點能夠遍歷所有的點,顯然它就是可以的。
用tarjan縮一下強聯通分量,入度為0的那個分量就是答案。
這樣就有60分。
用主席樹優化一下連邊。
大概是線段樹區間會下放到log個完整區間,直接往那些區間連邊。
那些區間往包含的點連邊。
注意插入有時效性,所以要用主席樹的那種思想,新開點。
#include
#include
#define fo(i, x, y) for(int i = x; i <= y; i ++)
#define min(a, b) ((a) < (b) ? (a) : (b))
using namespace std;
const int n = 1e5 + 5, m = 1e7 + 2e6, d = 6e6;
int n, td, c[n], d[m];
struct node a[n];
int c1(node a, node b)
int c2(node a, node b)
int c3(node a, node b)
int final[d], next[m], to[m], tot, rt;
void link(int
x, int
y) int pl, pr, px;
struct tree t[d];
void fi(int &i, int
x, int
y) int
m = x + y >> 1;
fi(t[i].l, x, m); fi(t[i].r, m + 1, y);
}void add(int &i, int
x, int
y) void gg()
}int win(int i, int j)
int dfn[d], low[d], tt, fa[d], tf, bd[d];
int zx[m], zi[m], z0;
bool bz[m];
void dg(int
x) else
}if(ti) continue;
if(dfn[x] == low[x]) while(d[d[0] --] != x);
}} else else
}if(ti) continue;
if(dfn[x] == low[x]) while(d[d[0] --] != x);}}
z0 --;
}}int main()
XSY2892 GDSOI2018 誰是冠軍
為什麼noi模擬賽裡會做到省選原題啊 有n個人,簡單起見把他們編號為1到n,每個人有三項指標分別是攻擊力,防禦力和血量。現在要進行n 1場比賽,每次在剩下的人裡面隨機地選出兩個人進行比賽,當乙個人有大於等於兩項指標嚴格大於另乙個人時,這個人獲得勝利。每次比賽,勝者留下,敗者淘汰。現在請你求出所有可能...
雅禮 noip2018 模擬賽 day3 T3
典型樹形dp 這裡,我們應該看到一些基本性質 如果這個邊不能改 不是沒有必要改 我們就不改,因為就算改過去還要改回來,顯然不是最優的 注意 不能改 是指邊的性質和要求的相同而不包括對邊的顏色沒有要求的情況!如果我們每翻轉一條邊,就認為將這條邊的兩個端點度數 1,那麼不難看到,最後翻轉的所有邊構成的路...
雅禮 noip2018 模擬賽day3 T2
典型的狀壓思想 設0表示黑球,1表示白球,用一串01序列代表剩下的球的狀態,記f i 表示在i狀態下取球的最大期望 那麼可以利用記憶化搜尋更新,每一層列舉可能拿走的球然後向下搜尋,同時記憶化即可 在狀態中刪去乙個點可以利用位運算實現 同時要注意乙個問題,就是狀態0010和狀態010並不是相同的狀態,...