【BZOJ3417】Poi2013 Tales of seafaring 分层图BFS
【BZOJ3417】Poi2013 Tales of seafaring
Description
一个n点m边无向图,边权均为1,有k个询问
每次询问给出(s,t,d),要求回答是否存在一条从s到t的路径,长度为d
路径不必是简单路(可以自交)
2<=N<=5000,1<=M<=5000,1<=K<=1000000,1<=d<=1000000000
Sample Input
1 2
2 3
3 4
5 6
6 7
7 8
8 5
2 3 1
1 4 1
5 5 8
1 8 10
Sample Output
NIE
TAK
NIE
题解:由于可以走重复的边,所以我们可以先走最短路过去,然后不断重复走同一条边。然而这样就对最短路长度的奇偶性有要求。所以我们将图分层,维护每个点到其他点的长度为奇数和偶数的最短路,用BFS即可。
然而本题卡空间所以要将询问离线。
还要特判从一个点走到自身,且这个点没有出边的情况。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
using namespace std;
const int maxn=5010;
int n,m,k,cnt;
int to[maxn<<1],next[maxn<<1],head[maxn],dis[maxn][2],ans[1000010];
queue<int> qx,qy;
struct node
{
int x,v,org;
node() {}
node(int a,int b,int c) {x=a,v=b,org=c;}
};
vector<node> p[maxn];
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+(gc^'0'),gc=getchar();
return ret*f;
}
inline void add(int a,int b)
{
to[cnt]=b,next[cnt]=head[a],head[a]=cnt++;
}
int main()
{
memset(head,-1,sizeof(head));
register int i,j,a,b,c;
n=rd(),m=rd(),k=rd();
for(i=1;i<=m;i++) a=rd(),b=rd(),add(a,b),add(b,a);
for(i=1;i<=k;i++) a=rd(),b=rd(),c=rd(),p[a].push_back(node(b,c,i));
for(i=1;i<=n;i++) if(p[i].size())
{
memset(dis,-1,sizeof(dis));
dis[i][0]=0,qx.push(i),qy.push(0);
while(!qx.empty())
{
a=qx.front(),b=qy.front(),qx.pop(),qy.pop();
for(j=head[a];j!=-1;j=next[j]) if(dis[to[j]][b^1]==-1)
dis[to[j]][b^1]=dis[a][b]+1,qx.push(to[j]),qy.push(b^1);
}
for(j=0;j<(int)p[i].size();j++) if(dis[p[i][j].x][p[i][j].v&1]!=-1&&dis[p[i][j].x][p[i][j].v&1]<=p[i][j].v)
{
if(head[i]!=-1) ans[p[i][j].org]=1;
}
}
for(i=1;i<=k;i++)
{
if(ans[i]) printf("TAK\n");
else printf("NIE\n");
}
return 0;
}
【BZOJ3417】Poi2013 Tales of seafaring 分层图BFS的更多相关文章
- BZOJ3417[Poi2013]Tales of seafaring——BFS
题目描述 Young Bytensson loves to hang out in the port tavern, where he often listens to the sea dogs te ...
- BZOJ3417 : Poi2013 Tales of seafaring
若x到y走k步可行,那么走k+2步也可行 以每个点为起点,BFS处理出到每个点走了奇数步.偶数步的最短路 对于一次询问,如果d不小于相应奇偶性的最短路,则可行 特判:对于孤立点,无论怎么走都不可行 # ...
- bzoj3417:[POI2013]MOR-Tales of seafaring
传送门 这个题比较水,很容易看出 1.最短路小于d,直接看奇偶性就好了 2,最短路大于d,puts("NIE\n"); 主要就是判奇偶性的问题,将每个点拆成奇点和偶点跑bfs就行了 ...
- POJ3635 Full Tank? 优先队列BFS or 分层图最短路 or DP?
然而我也不知道这是啥啊...反正差不多...哪位大佬给区分一下QWQ.. 好的,我把堆的<写反了..又调了一个小时..你能不能稳一点.... 记录状态:所在位置u,油量c,花费w 扩展状态: 1 ...
- BZOJ_1195_[HNOI2006]最短母串_AC自动机+BFS+分层图
BZOJ_1195_[HNOI2006]最短母串_AC自动机+BFS+分层图 Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2, ...
- 「hdu 4845 」拯救大兵瑞恩 [CTSC 1999](状态压缩bfs & 分层图思想)
首先关于分层图思想详见2004的这个论文 https://wenku.baidu.com/view/dc57f205cc175527072208ad.html 这道题可以用状态压缩,我们对于每一把钥匙 ...
- 【BZOJ3417】[POI2013]MOR-Tales of seafaring (最短路SPFA)
[POI2013]MOR-Tales of seafaring 题目描述 一个n点m边无向图,边权均为1,有k个询问 每次询问给出(s,t,d),要求回答是否存在一条从s到t的路径,长度为d 路径不必 ...
- ACdream 1017 [分层图][网络流]
/* 大连热身C题 不要低头,不要放弃,不要气馁,不要慌张 题意: 给一个城市路线图,给定起点给定终点.有n个货物从起点运送到终点.城市的边是无向边. 每个货物每天如果通过某条路,那么这天这条路只能运 ...
- poj3635Full Tank?[分层图最短路]
Full Tank? Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7248 Accepted: 2338 Descri ...
随机推荐
- js获取当前域名的方法
一.获取当前域名 1.方法一 var domain = document.domain; 2.方法二 var domain = window.location.host; 但是获取到的domain在线 ...
- find_if查找vector内对象的成员 作为菜鸟一直不会用也不敢用
用stl的find方法查找一个包含简单类型的vector中的元素是很简单的,例如 vector<string> strVec; find(strVec.begin(),strVec.end ...
- mysql 主主复制(双主复制)binlog-do-db
[root@DB ~]# grep "binlog-do-db" /etc/my.cnf binlog-do-db = test [root@DB-S ~]# grep " ...
- Typeface-为自定义字体提供字体内存缓存
Android 上自定义字体的代码一般如下: TextView textview = (TextView) findViewById(R.id.your_referenced_textview); / ...
- tornado长轮询
1.什么是长轮询顾名思义,长轮询就是不停循环请求服务器,获取最新信息.长轮询分为两类:1)浏览器以固定时间间隔向服务器发送请求缺点是轮询频率要足够快,但又不能太频繁,否则当成百上千个客户端不断请求,会 ...
- Linux kernel 之 uart 驱动解析
uart 是一种非常之常见的总线,比如DEBUG信息输出,小数据量数据传输,485,以及蓝牙的控制,GPS,很多都是通过uart 进行数据传输并进行控制. 在Linux kernel 内部,uart ...
- am335x alsa codec调试
root@phyCORE-AM335x:~ aplay -l**** List of PLAYBACK Hardware Devices ****card 0: audio [PCM051 audio ...
- Keil(MDK-ARM)系列教程(五)_Configuration(Ⅰ)
推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来! http://www.captainbed.net/strongerhuang Ⅰ.写在前 ...
- RabbitMQ之路由(Routing)【译】
在上一节中,我们创建了一个简单的日志系统,可以广播消息到很多接收者. 这一节,我们将在上一节的基础上加一个功能--订阅部分消息.例如,我们只将严重错误信息写入到日志文件保存在磁盘上,同时我们能将所有的 ...
- ES-PHP向ES批量添加文档报No alive nodes found in your cluster
ES-PHP向ES批量添加文档报No alive nodes found in your cluster 2016年12月14日 12:31:40 阅读数:2668 参考文章phpcurl 请求Chu ...