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. ...
随机推荐
- 第三周之Hadoop学习(三)
从上周的这篇教程中继续hadoop的安装过程:http://dblab.xmu.edu.cn/blog/install-hadoop-in-centos/ 上节课安装到对hadoop中的输出的文件夹的 ...
- 【转】issue management in your test project
What is Issue Management? Issue Management is the process to make others aware of the problem and th ...
- 八 Struts2访问Servlet的API方式三:接口注入
Struts2访问Servlet的API方式三:接口注入 通过实现ServletRequestAware, ServletContextAware 接口,拿到Request.ServletContex ...
- java事务/springboot事务/redis事务
java事务(数据库事务):jdbc事务--ACID springboot事务:@Transactional--ACID redis事务:命令集合 将redis事务与mysql事务对比: Mysq ...
- 2019年5月17日A股暴跌行情思考
2019年5月17日A股暴跌行情思考 原因:特朗普针对华为的禁商令,人民币对美元汇率大跌 盘面:平开,单边下跌,收盘80多股跌停 操作:下午2点加仓,满仓 总结: 本次操作太过激进. 局势不明朗时抄底 ...
- Python中的进制表示方式及转换方法
在Python中,非十进制数字的表示方式为: 二进制:前面加0b,如0b1001 八进制:前面加0o,如0o3562 十六进制:前面加0x,如0x2af3 不同进制数字可直接进行数学计算,结果返回十进 ...
- Linux centosVMware LAMP php-fpm的pool、php-fpm慢执行日志、open_basedir、php-fpm进程管理
一.php-fpm的pool vim /usr/local/php/etc/php-fpm.conf//在[global]部分增加 include = etc/php-fpm.d/*.conf mkd ...
- uniGUI之MASK遮罩(22)
在页面进行后台数据库操作的时候,不想 用户再进行 页面上的 其他操作,这时候就要 将页面 遮罩.例如UniDBGrid有LoadMask属性. 1]使用ScreenMask函数 2]JS调用 3]一个 ...
- AI算法工程师炼成之路
AI算法工程师炼成之路 面试题: l 自我介绍/项目介绍 l 类别不均衡如何处理 l 数据标准化有哪些方法/正则化如何实现/onehot原理 l 为什么XGB比GBDT好 l 数据清洗的方法 ...
- hdu 2838 Cow Sorting 树状数组求所有比x小的数的个数
Cow Sorting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...