任意門
幻象群島是由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...