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)的更多相关文章

  1. 洛谷P1808 单词分类_NOI导刊2011提高(01) 字符串排序

    洛谷P1808 单词分类_NOI导刊2011提高(01) 题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且 ...

  2. 洛谷P1809 过河问题_NOI导刊2011提高(01)

    To 洛谷.1809 过河问题 题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能乘坐两人.每个人都有一个渡河时 ...

  3. 洛谷 P1808 单词分类_NOI导刊2011提高(01)

    P1808 单词分类_NOI导刊2011提高(01) 题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且仅当 ...

  4. 洛谷P1776 宝物筛选_NOI导刊2010提高(02)(多重背包,单调队列)

    为了学习单调队列优化DP奔向了此题... 基础的多重背包就不展开了.设\(f_{i,j}\)为选前\(i\)个物品,重量不超过\(j\)的最大价值,\(w\)为重量,\(v\)为价值(蒟蒻有强迫症,特 ...

  5. 洛谷——P1795 无穷的序列_NOI导刊2010提高(05)

    P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000… 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...

  6. 洛谷P1776 宝物筛选_NOI导刊2010提高(02)

    P1776 宝物筛选_NOI导刊2010提高(02) 题目描述 终于,破解了千年的难题.小FF找到了王室的宝物室,里面堆满了无数价值连城的宝物……这下小FF可发财了,嘎嘎.但是这里的宝物实在是太多了, ...

  7. 洛谷 P1795 无穷的序列_NOI导刊2010提高(05)

    P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000… 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...

  8. 【洛谷P1795 无穷的序列_NOI导刊2010提高(05)】模拟

    分析 map搞一下 AC代码 #include <bits/stdc++.h> using namespace std; map<int,int> mp; inline int ...

  9. 背包问题的优化(洛谷1776 宝物筛选_NOI导刊)

    背包型dp,但是没有看清数据范围差点认为是水题了,(然后诡异的拿了20分)标解是:2进制优化,比较简单把每一类物品看做若干个相互独立的物品,放在一个另外的数组里,然后全局跑一边01就可以.主要思想是: ...

随机推荐

  1. JQuery的extend

    jQuery.extend 函数详解 JQuery的extend扩展方法:      Jquery的扩展方法extend是我们在写插件的过程中常用的方法,该方法有一些重载原型,在此,我们一起去了解了解 ...

  2. 使用ffmpeg添加logo

    1 网上搜出的一些ffmpeg添加logo的命令都不成功,调查了官方手册后以下这种用法成功: ffmpeg -y -i input.mp4 -vf "movie=logo.png [logo ...

  3. Relocation POJ-2923

    题目链接 题目意思: 有 n 个货物,并且知道了每个货物的重量,每次用载重量分别为c1,c2的火车装载,问最少需要运送多少次可以将货物运完. 分析:本题可以用二进制枚举所有不冲突的方案,再来dp 一下 ...

  4. Opencv— — Circle Filter

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  5. 装饰器 decorator

    装饰器 def document_it(func): def new_function(*args, **kwargs): print('Running function:', func.__name ...

  6. codevs 1147 排座椅

    传送门 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接 ...

  7. Tomcat 安装之后,双击Tomcat.exe,无法运行成功,怎么办?

    Log形式多种多样,有的时候跟下面一样: 首先的解决方案就是:修改server.xml中所有的端口,因为不只8080端口可能被占用! 我在出问题的时候就修改8080端口.结果死活运行不了,纠结一些时间 ...

  8. Tensorboard 的简单使用

    确保环境以及安装好tensorflow以及tensorboard 下面通过一个简单的例子来显示一下使用方式,一个向量加法的图结构. import tensorflow as tf a = tf.con ...

  9. FTP:文件传输协议(指令及响应代码)

    文件传输协议(FTP)使得主机间可以共享文件. FTP 使用 TCP 生成一个虚拟连接用于控制信息,然后再生成一个单独的 TCP 连接用于数据传输.控制连接使用类似 TELNET 协议在主机间交换命令 ...

  10. shell json简单处理