Shortest Path Codeforces - 59E || 洛谷P1811 最短路_NOI导刊2011提高(01)
https://codeforces.com/contest/59/problem/E
原来以为不会。。看了题解发现貌似自己其实是会的?
就是拆点最短路。。拆成n^2个点,每个点用(i,j)表示,表示这样的状态:原图中当前在j,前一步在i
然后就跑bfs,两点(i1,j1),(i2,j2)之前有边,当且仅当j1=i2,且(i1,j1,j2)没有被ban掉,且原图中(i2,j2)间有边;用一些set之类的来存储某三元组是否被ban
复杂度好像不是很对?然而仔细想一下可以发现转移最多总共只有O(nm)个,好像还行的样子
另外,在cf的数据上测出来这个方法跑的飞快(如果真的能卡满O(nm)还真的不一定能过?),不知道为什么
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<tr1/unordered_set>
#include<queue>
#include<set>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
struct pii
{
int fi,se;
};
bool operator==(const pii &a,const pii &b){return a.fi==b.fi&&a.se==b.se;}
struct H
{
inline size_t operator()(const pii &a) const
{
return unsigned(a.fi)*+a.se;
}
};
tr1::unordered_set<pii,H> s[];
struct E
{
int to,nxt;
}e[];
int f1[],ne;
pii pre[][];
int d[][];
int n,m,K;
queue<pii> q;
vector<int> an;
int main()
{
int i,x,y,z,u,v,k;pii t;
scanf("%d%d%d",&n,&m,&K);
for(i=;i<=m;++i)
{
scanf("%d%d",&x,&y);
e[++ne].to=y;e[ne].nxt=f1[x];f1[x]=ne;
e[++ne].to=x;e[ne].nxt=f1[y];f1[y]=ne;
}
for(i=;i<=K;++i)
{
scanf("%d%d%d",&x,&y,&z);
s[x].insert((pii){y,z});
}
q.push((pii){,});d[][]=;
while(!q.empty())
{
t=q.front();q.pop();
u=t.se;
if(u==n)
{
printf("%d\n",d[t.fi][u]-);
//printf("1t%d %d\n",t.fi,u);
//printf("2t%d %d\n",pre[t.fi][u].fi,pre[t.fi][u].se);
for(x=t.fi,y=u;y;z=x,x=pre[x][y].fi,y=z)
an.pb(y);
for(i=an.size()-;i>=;--i)
printf("%d ",an[i]);
return ;
}
//printf("1t%d %d\n",t.fi,t.se);
for(k=f1[u];k;k=e[k].nxt)
{
v=e[k].to;
if(!d[u][v]&&!s[t.fi].count((pii){u,v}))
{
d[u][v]=d[t.fi][u]+;
pre[u][v]=t;
q.push((pii){u,v});
}
}
}
puts("-1");
return ;
}
https://www.luogu.org/problemnew/show/P1811
原题啊2333
不过没有spj,貌似必须把代码改成vector存边才能过
貌似放了一大堆假算法过去啊。。。
Shortest Path Codeforces - 59E || 洛谷P1811 最短路_NOI导刊2011提高(01)的更多相关文章
- 洛谷P1808 单词分类_NOI导刊2011提高(01) 字符串排序
洛谷P1808 单词分类_NOI导刊2011提高(01) 题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且 ...
- 洛谷P1809 过河问题_NOI导刊2011提高(01)
To 洛谷.1809 过河问题 题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能乘坐两人.每个人都有一个渡河时 ...
- 洛谷 P1808 单词分类_NOI导刊2011提高(01)
P1808 单词分类_NOI导刊2011提高(01) 题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且仅当 ...
- 洛谷P1776 宝物筛选_NOI导刊2010提高(02)(多重背包,单调队列)
为了学习单调队列优化DP奔向了此题... 基础的多重背包就不展开了.设\(f_{i,j}\)为选前\(i\)个物品,重量不超过\(j\)的最大价值,\(w\)为重量,\(v\)为价值(蒟蒻有强迫症,特 ...
- 洛谷——P1795 无穷的序列_NOI导刊2010提高(05)
P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000… 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...
- 洛谷P1776 宝物筛选_NOI导刊2010提高(02)
P1776 宝物筛选_NOI导刊2010提高(02) 题目描述 终于,破解了千年的难题.小FF找到了王室的宝物室,里面堆满了无数价值连城的宝物……这下小FF可发财了,嘎嘎.但是这里的宝物实在是太多了, ...
- 洛谷 P1795 无穷的序列_NOI导刊2010提高(05)
P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000… 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...
- 【洛谷P1795 无穷的序列_NOI导刊2010提高(05)】模拟
分析 map搞一下 AC代码 #include <bits/stdc++.h> using namespace std; map<int,int> mp; inline int ...
- 背包问题的优化(洛谷1776 宝物筛选_NOI导刊)
背包型dp,但是没有看清数据范围差点认为是水题了,(然后诡异的拿了20分)标解是:2进制优化,比较简单把每一类物品看做若干个相互独立的物品,放在一个另外的数组里,然后全局跑一边01就可以.主要思想是: ...
随机推荐
- GIN+GORILLA=A GOLANG WEBSOCKET SERVER
鉴于聊天已然成为大部分app的基础功能,而大部分app用户基数有没有辣么大,常用的聊天server架构如xmpp或者消息队列实现之类的用起来还挺麻烦的,有比较难跟网页端做交互,加之H5标准落地,所以w ...
- poj3295 Tautology —— 构造法
题目链接:http://poj.org/problem?id=3295 题意: 输入由p.q.r.s.t.K.A.N.C.E共10个字母组成的逻辑表达式, 其中p.q.r.s.t的值为1(true)或 ...
- Python: PS滤镜--径向模糊
本文用 Python 实现 PS 滤镜中的径向模糊特效,具体的算法原理和效果可以参考之前的博客: http://blog.csdn.net/matrix_space/article/details/3 ...
- bootstrap 学习笔记(2)---- 排版
安装和栅格系统学完,这篇写的是排版手册中排版的目录如下图 <标题,页面主题,内联文本元素,对齐,改变大小写,缩略语,地址,引用,列表>手册中介绍那么多,其实并不是所有的都要去看看.很多都是 ...
- bzoj2330糖果——差分约束
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2330 差分约束,再建立一个源点0,向所有点连边权为1的边,表示每个人都会分到糖果: 答案较大 ...
- Java的Fork/Join任务,你写对了吗?
当我们需要执行大量的小任务时,有经验的Java开发人员都会采用线程池来高效执行这些小任务.然而,有一种任务,例如,对超过1000万个元素的数组进行排序,这种任务本身可以并发执行,但如何拆解成小任务需要 ...
- 1.oracle中decode的一些巧妙用法
1.符号函数sign在decode中的用法--比较大小 select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值sign()函数根据某个值是0 ...
- 【原】putty配置下载
文章出自:http://www.cnblogs.com/david-zhang-index/p/3205354.html putty配置下载,已经配置好了,颜色非常不错 PUTTY.zip
- CodeForces 1103E. Radix sum
题目简述:对任意两个(正)十进制数$a = \overline{a_{k-1}\dots a_1a_0}$和$b = \overline{b_{k-1}\dots b_1b_0}$,定义其[十进制按位 ...
- CF-796C
C. Bank Hacking time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...