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;
}
查询操作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;
}
相关文章推荐
- BZOJ_P2460 [BeiJing2011]元素(贪心+线性基)
- (未完成)Zookeeper学习(七):Master的选举
- phpmyadmin4.1.4安装配置教程
- RPM 程序包管理详解
- hdoj 2018 母牛的故事 (递归)
- mysql服务器查询慢原因分析与解决方法小结
- 网络 应用层协议
- 在中国知网下载 PDF 格式的学位论文
- 数据结构的学习一简单排序算法1
- 探索 .git 目录,让你真正理解 git
- Android自定义View基础篇(二)
- MYSQL开启慢查询日志实施
- AppBuilder(一)Use汇总
- 20145235李涛 《Java程序设计》第3周学习总结
- 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 在Linux环境下安装和配置phpmyadmin
- 工具推荐(持续更新中)
- TortoiseGit生成.PPK拓展名的密钥
- CodeForces 272C-Dima and Staircase-线段树区间更新-RMQ
- 变量声明