bzoj 1138: [POI2009]Baj 最短回文路
额,,貌似网上的题解都说超时之类的。
然而我这个辣鸡在做的时候不知道在想什么,连超时的都不会。
超时的大概是这样的,f[x][y]表示x到y的最短回文路,然后更新的话就是 f[x][y]更新到 f[a][b] 当x->a,y->b且边的颜色是一样的。
然后yy了一下为什么会超时呢。。。。
然后想到了一个sb的情况。。两个菊花图连起来。。。这样的复杂度就呵呵呵了。。每次用f[x][y]更新的话都要枚举一个颜色,然后把另一边的颜色找出来,这样显然是要爆炸的。
为了避免这种sb情况,就引入了一个叫题解的神奇的东西。
题解多设了一个东西,g[x][y][col]表示x到y且除了和y相连的那条颜色为col的边之外是回文最短路的长度。
然后有了g,就可以在一遍更新过g,f在另一边直接拿来用了。神奇2333
#include<iostream>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define inf 0x3f3f3f3f
using namespace std; const int maxn=;
const int QWQ=; struct edge{
int to,from,next;
}e[maxn<<],E[maxn<<];
int head[QWQ],cnt,HEAD[QWQ],CNT;
void insert(int x, int y)
{
e[++cnt].next=head[x]; e[cnt].to=y; e[cnt].from=x; head[x]=cnt;
E[++CNT].next=HEAD[y]; E[CNT].to=x; E[CNT].from=y; HEAD[y]=CNT;
} int l,r=;
int n,m,map[QWQ][QWQ],f[QWQ][QWQ],g[QWQ][QWQ][];
struct node{
int from,to,col;
}q[QWQ*QWQ*];
void bfs()
{
while (l<r)
{
node u=q[l++];
int x=u.from,y=u.to;
if (!u.col)
{
for (int i=head[y];i;i=e[i].next)
{
if (f[x][y]+<g[x][e[i].to][map[y][e[i].to]])
{
g[x][e[i].to][map[y][e[i].to]]=f[x][y]+;
q[r++]=(node){x,e[i].to,map[y][e[i].to]};
}
}
}
else
{
for (int i=HEAD[x];i;i=E[i].next)
{
if (g[x][y][map[E[i].to][x]]+<f[E[i].to][y])
{
f[E[i].to][y]=g[x][y][map[E[i].to][x]]+;
q[r++]=(node){E[i].to,y,};
}
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
memset(f,0x3f,sizeof(f)); memset(g,0x3f,sizeof(g));
for (int i=; i<=m; i++)
{
int x,y; char Orz[];
scanf("%d%d%s",&x,&y,Orz);
insert(x,y);
map[x][y]=Orz[]-'a'+;
f[x][y]=;
q[r++]=(node){x,y,};
}
for (int i=; i<=n; i++) f[i][i]=,q[r++]=(node){i,i,};
bfs();
int T; scanf("%d",&T);
int x,y; scanf("%d",&x);
for (int i=; i<=T; i++)
{
scanf("%d",&y);
if (f[x][y]!=inf) cout<<f[x][y]<<endl;
else puts("-1");
x=y;
}
return ;
}
bzoj 1138: [POI2009]Baj 最短回文路的更多相关文章
- bzoj 1138: [POI2009]Baj 最短回文路 dp优化
1138: [POI2009]Baj 最短回文路 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 161 Solved: 48[Submit][Sta ...
- [BZOJ1138][POI2009]Baj 最短回文路
[BZOJ1138][POI2009]Baj 最短回文路 试题描述 N个点用M条有向边连接,每条边标有一个小写字母. 对于一个长度为D的顶点序列,回答每对相邻顶点Si到Si+1的最短回文路径. 如果没 ...
- [Swift]LeetCode214. 最短回文串 | Shortest Palindrome
Given a string s, you are allowed to convert it to a palindrome by adding characters in front of it. ...
- [python,2019-02-15] 最短回文串
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...
- leetcode 214. 最短回文串 解题报告
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...
- 214 Shortest Palindrome 最短回文串
给一个字符串 S, 你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串.例如:给出 "aacecaaa",返回 "aaacecaaa ...
- Leetcode 214.最短回文串
最短回文串 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: &qu ...
- Java实现 LeetCode 214 最短回文串
214. 最短回文串 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出 ...
- [LeetCode] Shortest Palindrome 最短回文串
Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. ...
随机推荐
- Python 基础之正则之一 单字符,多字符匹配及开头结尾匹配
一.正则表达式之单个字符匹配 格式:lst = re.findall(正则表达式,要匹配的字符串)预定义字符集 匹配内容 .匹配任意字符,除了换行符\n \d匹配数字 \D匹配非数字 \w匹配字母或数 ...
- 关于java自学的内容及感受
这周自学了关于java类的知识,进度有点慢,需要抓紧学习剩下的知识,放假后由于自制力差而各种玩没有认认真真的学习,下周要认真的学习之后的进度,争取开学玩全部完成! /** * 动物的类 * */pub ...
- IVM sdk command
1.load sdk shell ./auto_load_user.sh 2.查看all端口状态 IVM:0>ifcs show devport 3.查看个别端口状态 IVM:0>ifcs ...
- ArcMap中对失量数据将具有相同的字段的元素进行合并
ArcMap=>工具栏=>Geoprocessing=>Dissolve,由于是将多个元素进行合并,所以还涉及到合并后的元素的字段保留以及字段取值的问题,在该工具中还可以自定义保存的 ...
- spring boot 是如何启动 tomcat
Spring boot 的启动类启动后,tomcat 容器.Spring mvc .spring 事务等等第三方依赖也已经自动启动,那么spring boot 是如何启动的第三方依赖? 以spring ...
- Spring Boot + MyBatis + PostgreSql
Maven构建项目 1.访问http://start.spring.io/ 2.选择构建工具Maven Project.Spring Boot版本1.3.6以及一些工程基本信息,点击“Switch t ...
- c3p0 获取数据源
getDataSourcec3p0Resource private static void f3Resource() throws Exception { Connection conn = getD ...
- 【PAT甲级】1029 Median (25 分)
题意: 输入一个正整数N(<=2e5),接着输入N个非递减序的长整数. 输入一个正整数N(<=2e5),接着输入N个非递减序的长整数.(重复一次) 输出两组数合并后的中位数.(200ms, ...
- 修改vue中的挂载页面(index.html)的路径
修改vue中的挂载页面(index.html)的路径 2019年03月30日 12:07:12 VegasLemon 阅读数 501 版权声明:本文为博主原创文章,未经博主允许不得转载. htt ...
- 「luogu2633」Count on a tree
「luogu2633」Count on a tree 传送门 树上主席树板子. 每个节点的根从其父节点更新得到,查询的时候差分一下就好了. 参考代码: #include <algorithm&g ...