您的位置:首页 > 其它

CodeForces 320B Ping-Pong (Easy Version)-DFS

2016-03-20 18:50 525 查看
n太小。每次非查询操作,on建边,

查询操作dfs(n)输出

#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iostream>
using namespace std;

const double pi=acos(-1.0);
double eps=0.000001;

int mp[105][105];
struct node
{
int x,y;
node(){}
node(int a,int b)
{x=a;y=b;}
} ;
node tm[105];

int vis[105];
int n;
int dfs(int x,int y)
{
vis[x]=1;
if (x==y) return 1;
int ret=0;int i;
for (i=1;i<=n;i++)
{
if (mp[x][i]==0||vis[i]) continue;
ret=dfs(i,y);
if (ret) return 1;
}
return 0;
}
int main()
{
int ok=0;
cin>>n;
int q,x,y;

int i,j;
for (i=1;i<=n;i++)
{
scanf("%d%d%d",&q,&x,&y);

if (q==1)
{
tm[++ok]=node(x,y);
for (j=1;j<ok;j++)
{
int flag=0;
if (tm[ok].x<tm[j].x&&tm[j].x<tm[ok].y) flag=1;
if (tm[ok].x<tm[j].y&&tm[j].y<tm[ok].y) flag=1;
if (flag)
mp[j][ok]=1;

flag=0;
if (tm[j].x<tm[ok].x&&tm[ok].x<tm[j].y) flag=1;
if (tm[j].x<tm[ok].y&&tm[ok].y<tm[j].y) flag=1;
if (flag)
mp[ok][j]=1;
}
}
else
{
memset(vis,0,sizeof(vis));
if (dfs(x,y)) printf("YES\n");
else printf("NO\n");

}

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: