生活随笔
收集整理的這篇文章主要介紹了
POJ 1172 DFS
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(感謝wzc學長的幻燈片)
單組數據 注意從必經點能到標記過的點則此點不是分裂點。
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
int tot=
1,first[
51],cnt,v[
101],nxt[
101],n,vis[
51],ansx=
0,ansy=
0,j,k;
queue<int> p,q,r;
void add(
int x,
int y){v[tot]=y,nxt[tot]=first[x],first[x]=tot++;}
int main()
{
memset(first,-
1,
sizeof(first));
for(cnt=
0;~n;cnt++)
while(
scanf(
"%d",&n)&&n>=
0)add(cnt,n);cnt--;
for(
int i=
1;i<cnt;i++){
memset(vis,
0,
sizeof(vis));q.push(
0);vis[i]=
1;
while(!q.empty()){
int t=q.front();q.pop();vis[t]=
1;
for(
int l=first[t];~l;l=nxt[l])
if(!vis[v[l]])q.push(v[l]);}
if(!vis[cnt]){ansx++,p.push(i);
for(j=
0;j<=cnt;j++)
if(!vis[j]||j==i)
for(k=first[j];~k;k=nxt[k])
if(vis[v[k]]&&v[k]!=i)
goto end;ansy++,r.push(i);end:;}}
printf(
"%d",ansx);
while(!p.empty())
printf(
" %d",p.front()),p.pop();
printf(
"\n");
printf(
"%d",ansy);
while(!r.empty())
printf(
" %d",r.front()),r.pop();
}
轉載于:https://www.cnblogs.com/SiriusRen/p/6532456.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的POJ 1172 DFS的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。