蛤?
這題絕對有問題。。。
複雜度明顯不對頭。。。
它的想法其實就是找到乙個點,判斷它與它周圍的點能否構成環,然後不能再刪去這個點。。。
然而。。。他每次都memset了一發,這不t?服都服了。。。
#include
#include
#include
#include
#define sf scanf
#define pf printf
#define maxn 1010
using
namespace std;
typedef vector<
int> vi;
vector<
int> a[maxn]
;int mark[maxn]
,done[maxn]
;bool lk[maxn]
[maxn]
,vis[maxn]
;int que[maxn]
;vi bfs
(int s)
} vi res;
for(
int i=
1;i<=r;i++
) res.
push_back
(que[i]);
return res;
}int q[maxn]
,pre[maxn]
;void
find_cir
(int x,
int y,
int key)
else
if(done[v]==0
&&vis[v]==0
&&mark[v])}
}}bool
solve
(vi &les)
done[u]=1
;for
(int k=
0;k<
int(les.
size()
);k++)if
(vis[les[k]]==
0&&done[les[k]]==
0)sort
(nc.
begin()
,nc.
end())
; nc.
erase
(unique
(nc.
begin()
,nc.
end())
,nc.
end())
;for
(int i=
0;i<
int(nc.
size()
);i++)if
(mark[nc[i]]==
1)for(
int j=
0;j<
int(nc.
size()
);j++)if
(i!=j&&lk[nc[i]
][nc[j]]==
0)for(
int i=
0;i<
int(nc.
size()
);i++
) nles.
push_back
(nc[i]);
les_part.
push_back
(nles);}
vi ad;
for(
int i=
0;i<
int(a[u]
.size()
);i++)if
(mark[a[u]
[i]]
) ad.
push_back
(a[u]
[i])
;for
(int i=
0;i<
int(les_part.
size()
);i++)if
(solve
(les_part[i]))
return1;
return
solve
(ad);}
intmain()
for(
int i=
1;i<=n;i++
) les.
push_back
(i);if(
solve
(les)==0
)pf("no");
pf("\n");
}}
BZOJ十連測 線段樹
在若干次操作後,某乙個位置的值可以表示成若干各區間的最大值。例如位置k kk,我們找到當前操作前最後乙個 編號最大但小於當前編號 覆蓋當前區間左端點的操作的左端點,最後乙個覆蓋當前當前區間右端點的操作的右端點,把這個左右端點當成乙個新的操作區間,然後重複執行上述操作。也就是我們需要一直向左找,一直向...
正睿2020提高組十連測 選做
更新中.目錄題目鏈結 理解題意,打出第乙個暴力 首先需要知道,隨機生成的樹 如果不特別說明隨機方法,就是指在所有 n 棵樹里隨機 最大深度期望是 o sqrt 的。看本題。首先,期望是嚇唬你的,因為期望乘上階乘,其實就是求和。於是我們要求 所有排列下 操作後所有點的權值和 的和 因此暴力做法就是列舉...
BZOJ 2017省隊十連測推廣賽1
聽學長說有比賽就隨便打一打。a.普通計算姬 題目大意 給出一棵帶權樹,支援一下兩種操作 1.修改乙個點的權值 2.給出l,r,詢問以點l為根的子樹和 點l 1為根的子樹和 點l 2為根的子樹和 點r為根的子樹和的總和。點數 運算元不超過10 5 思路 感覺是三題中最難的。給出的 l,r 區間在樹上沒...