強聯通 魔法石

2021-09-28 15:37:47 字數 1936 閱讀 5439

任意門

幻象群島是由n個孤立的島嶼構成。島嶼之間有一些殘破的石橋,而橋心的石墩上,就有可能鑲嵌著上古魔法石。約翰尼可以通過這些石橋,從一座島跑到另一座島,如果島上恰好有魔法石,他就可以順便收集。但是由於這些石橋實在是太殘破了,約翰尼經過之後,石橋就會崩塌,不能再次通過。(由於約翰尼踩過的部分很快就會崩塌,所以他也不能先跑到橋心,然後原路返回)。

約翰尼現在處在島a,而島b上則有乙個傳送門,只有在那裡,約翰尼才能安全地離開幻象群島。約翰尼想知道,他能順利地收集到至少一塊上古魔法石,並安全離開嗎?

縮點+dp

dp 點權+邊權

注意:起點的點權

#include

#define bu printf("bug")

using

namespace std;

const

int n=

3e6+

10,m=

3e6+10;

int s,t;

int n,m;

int head[n]

,nex[m*2]

,to[m*2]

,val[m*2]

,tot;

void

build

(int u,

int v,

int w)

void

init()

int z[n]

,p;int dfn[n]

,low[n]

,cnt;

int col[n]

,color;

void

tarjan

(int u,

int f)

elseif(

!col[v]

) low[u]

=min

(low[u]

,dfn[v]);

}if(low[u]

==dfn[u])}

int dp[n]

;int num[n]

;void

dfs(

int u,

int f)

}int u[m]

,v[m]

,w[m]

;int

main()

for(

int i=

1;i<=n;i++)if

(!dfn[i]

)tarjan

(i,0);

init()

;for

(int i=

1;i<=m;i++

)/*printf("\n-----------\n");

for(int i=1;i<=n;i++)

printf("%d(%d) ",col[i],i);

printf("\n");

for(int i=1;i<=color;i++)printf("%d(%d) ",num[i],i);

printf("\n");*/

scanf

("%d%d"

,&s,

&t);

s=col[s]

,t=col[t]

; dp[s]

=num[s]

;dfs

(s,0);

if(dp[t]

>=1||

(s==t&&num[s]

>=1)

)printf

("yes\n");

else

printf

("no\n");

for(

int i=

1;i<=n;i++

) col[i]

=low[i]

=dfn[i]

=dp[i]

=num[i]=0

; color=

0;cnt=0;

}}

魔法石之戀

問題描述 在 harry potter and the sorcerer s stone 中,想得到魔法石,必須要通過許許多多的測試和遊戲。現在阿不思 鄧布利多認為這些遊戲都具有魔法力,魔法師們能夠輕鬆的通過,我們要增加一些只能夠通過智力解決的題目,需要真正的聰明人才能夠通過。現在由於我們敬愛的ha...

RQNOJ魔法石之戀

魔法石之戀 stone.pas c cpp 問題描述 在 harry potter and the sorcerer s stone 中,想得到魔法石,必須要通過許許多多的測試和遊戲。現在阿不思 鄧布利多認為這些遊戲都具有魔法力,魔法師們能夠輕鬆的通過,我們要增加一些只能夠通過智力解決的題目,需要真...

題目 魔法石之戀

問題描述 在 harry potter and the sorcerers stone 中,想得到魔法石,必須要通過許許多多的測試和遊戲。現在阿不思 鄧布利多認為這些遊戲都具有魔法力,魔法師們能夠輕鬆的通過,我們要增加一些只能夠通過智力解決的題目,需要真正的聰明人才能夠通過。現在由於我們敬愛的har...