NOIP2016提高A組集訓第5場11 2 夕陽

2021-07-24 07:31:07 字數 1415 閱讀 6622

「我有個願望,我希望在燦爛千陽時遇見你。」

這是個有n個點的世界,有m條無向邊連線著這n個點,但是不保證點之間能夠互相到達。

「這個世界的夕陽,只在奇數長的簡單路徑的盡頭。」乙個神如是說。

於是我想知道對於乙個點對(x,y),x到y之間的所有簡單路徑中是否存在長度為奇數的路徑,只有這樣,我才能找到存在有夕陽的路。

如果兩個點存在奇數的路徑,那麼這兩個點存在於用乙個奇環中。

問題就是怎麼找奇環。

tarjan演算法。

那麼求邊雙連通分量,構出的tarjan樹,當存在一條虛邊的時候(就是連出去的那個點已經在棧中出現過了),那麼這個虛邊構成的簡單環中的邊都是奇環,退棧的時候暴力修改就好了。

最後詢問兩個點的lca,如果他們的深度差是奇數或者路徑中有奇環上的邊的話,那麼就合法。

#include

#include

#include

#include

#include

#define fo(i,a,b) for(i=a;i<=b;i++)

#define fod(i,a,b) for(i=a;i>=b;i--)

#define rep(i,a) for(i=first[a];i;i=next[i])

using

namespace

std;

const

int maxn=100007;

int i,j,k,l,t,n,m,ans,x,y,z,cas,u,v,zhi;

int first[maxn*2],last[maxn*2],next[maxn*2],num;

int f[maxn][20],g[maxn][20];

int dfn[maxn],low[maxn],stack[maxn],dfx,h[maxn],hhh,deep[maxn];

bool az[maxn],cz[maxn],bz[maxn];

void add(int x,int y)

int tarjan(int x)

else

if(az[last[i]])

low[x]=min(low[x],dfn[last[i]]);}}

}if(dfn[x]==low[x])

if(p)fo(i,stack[0]+1,u)g[stack[i]][0]++;

}}int lca(int x,int y)return x;

}int main()

fo(i,1,n)

fo(j,1,19)

for(scanf("%d",&cas);cas;cas--)

if(((deep[x]+deep[y]-2*deep[o])%2==1)||zhi)

else

printf("no\n");

}}

NOIP2016提高A組集訓第8場11 5總結

早上8 30才到機房,結果跳閘了,幾分鐘後修復。比賽時手動開始的,比較人性化。8 50開始看題。先是第一題,多次詢問給定區間內連續一段的和模p的值最小,資料範圍第一眼看嚇死人,第二眼發現p很小,於是想種p棵線段樹,然後就不知道怎麼搞了。第二題,詭異的求最小值問題,覺得像貪心,卻又不知從何下手,於是直...

NOIP2016提高組總結

這次noip可以用幾個字來形容 浪的飛起,頹的不行。中午從校門出發,在車上睡了半個車程。4 00左右,霧比較大,遠處的小蠻腰若隱若現。你好,廣州。5 00,symbol叫我們去看考場,結果被拒在門外,然後大家都散了。我與其它幾位小夥伴匆匆吃完飯,回到酒店,該看電視看電視,中途開會,提醒我們一些注意事...

NOIP2016 提高組 總結

這是倒數第三次noip了。今年我初三。去年的傷痕還未褪去,我在比賽前意識到,當務之急其實是鞏固基礎而非深究一些難題。於是賽前兩周,我認真讀了白書的前面部分,尤其重點練習了dp。dp作為基礎演算法之一,其靈活性極高,所以可以出得很難,也是各種比賽的寵兒。練好dp是尤為重要的。賽前好幾場模擬賽都做得很爛...