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就可以.主要思想是: ...
随机推荐
- div和span、relative和absolute、display和visibility的区别
一.div和span的区别 div是一个块级元素,可以包含段落,表格等内容,用于放置不同的内容.一般我们在网页通过div来布局定位网页中的每个区块. span是一个内联元素,没有实际意义,它的存在纯粹 ...
- String StringBuffer StringBuilder 三者之间的区别
今天被公司骗去面试,好糟心...... 这个问题不管去哪里面试,基础问题基本上都会问到这个问题.网上好多大神都总结,这里自己也总结一下. 首先我们最开始学的就是String字符串常量,这里有行代码 S ...
- Linux:普通用户不能执行ifconfig命令问题
有客户现场服务器禁用了root帐号,在普通帐号下,执行ifconfig,提示bash:ifconfig command not found: 导致业务系统无法用普通帐号获取ifcnofig的MAC地址 ...
- Django中使用静态资源/文件
Django中常需要引用js,css,小图像文件,一般我们把这一类文件称为静态文件,放置在static文件夹中,接下来,对Django中配置静态文件进行下傻瓜式的步骤介绍 在工程目录下新建static ...
- CQOI2017 部分题解
部分题解是指没写那道算几. BZOJ上目前没有day2的题面D2T2的图. BZOJ4813 小Q的棋盘 显然可以$O(n^2)$DP,然而可以$O(n)$贪心:只有一条从根出发的一条链上的边可以只经 ...
- Batch Normalization层
Batch Normalization的加速作用体现在两个方面:一是归一化了每层和每维度的scale,所以可以整体使用一个较高的学习率,而不必像以前那样迁就小scale的维度:二是归一化后使得更多的权 ...
- JavaScript-Tool:jquery.md5.js
ylbtech-JavaScript-Tool:jquery.md5.js 1.返回顶部 1. 引入js后 使用方法:document.write($.md5('1234')); 加密结果:81dc9 ...
- bzoj3676
后缀自动机+manacher 听说本质不同的回文串只有O(n)个 那么用manacher求出所有回文串,然后在sam上查找出现了几次就行了 sam的性质又忘了... manacher也忘了... #i ...
- TextMode="Password" 赋值(小技巧)
TextMode="Password"不能在后台直接向前台赋值,但是可以用js赋值. txtUserPassword.Attributes.Add("value" ...
- 程序兵法:Java String 源码的排序算法(一)
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第103篇原创 <程序兵法:Java Str ...