説明
ウォークラフトの古代の伝説では、自然災害と呼ばれる2つの軍団、近衛という名前の男があります。それらがされている領域では、nはパスがあり、番号1 ... nは、チャネル間のパスの一部が接続されています。前記センチネルパス番号1、番号nはパス災難。ある日、リッチキングスカージのリーダーは、センチネルを攻撃するために、このような大きな力のスカージを軍隊を送り、さらには川を渡って川を埋めることにしました。しかし、リッチキングは、不要なコストを支払うことをしたくなかった、彼は前提の下で知りたかった攻撃部隊にセンチネル峠に到着し、関連するチャネルを介して可能かどうか、任意のチャンネルを構築しません。そのため、比較的大きなnの値(N <= 1000)の、そしてリッチキングは良いプログラミングを見つけた= _ =あなた、あなたはそう、あなたが彼の魔法になって食べるよ、彼はこの問題を解決するのに役立ちます。自分自身を保存し、かつ迅速な方法でそれを考えるために。
入力
複数組、各フォーマットを含む入力。
最初の行は、(チャネルの間にMパスあり、nはパスを表す)、N、Mは2つの整数を含んでいます。
次のm行二つの整数、Bを含み、パス(注:チャネルは一方向性である)への通路を有し、Bからの逸脱を表します。
出力
スカージは、第1パスに到達するために、出力YES、それ以外の場合は出力NOを任意のチャネルを構築することができない場合。
サンプル
入力
2 1
1 2
2 1
2 1
出力
NO
YES
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#include<queue>
using namespace std;
int Map[1100][1100],vis[1100];
int n,m;
int flag;
void dfs(int t)
{
vis[t] = 1;
for(int i=n; i>=1; i--)
{
if(!vis[i]&&Map[t][i]==1)
{
if(i == 1)
{
flag = 1;
return;
}
dfs(i);
}
}
}
int main()
{
int t,p;
int u,v;
while(~scanf("%d %d",&n,&m))
{
memset(vis,0,sizeof(vis));
memset(Map,0,sizeof(Map));
flag = 0;
for(int i=0; i<m; i++)
{
scanf("%d %d",&u,&v);
Map[u][v] = 1;
}
dfs(n);
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}