51nod_1445 变色DNA 最短路模板 奇妙思维
这是一道最短路模板题,但是在理解题意和提出模型的阶段比较考验思维,很容易想到并且深深进入暴力拆解题目的无底洞当中。
题意是说:给出一个邻接矩阵,在每个点时,走且仅走向,合法路径中编号最小的点。问题是是否能够从0点走向n-1点。如果可以走到,求出,最少应当删除几个合法边(如果(1,2)(2,1)(2,3)同时合法,前两个边就会不停的循环,这时候必须删掉(2,1)才能够让(2,3)这条边被走到,从而到达新的节点)。
题解:重新定义变得权重:按照题意变得权重应当每次是1,但是显然在这道题的设定下,这个权重并没有意义。因此应当重新定义每条边的权重:使得邻接矩阵path[i][j]代表的含义是:如果要合法的走过这条边,应当删除前面的几条边?
普通的dijkstra:
#include<bits/stdc++.h>
using namespace std; long long cases,n,m;
const long long MAXN=+;
const long long INF=1e12+;
long long path[MAXN][MAXN];
long long dp[MAXN]; void init()
{
cin>>n;
for(int i=;i<n;++i)
{
dp[i]=INF;long long point=;
for(int j=;j<n;++j)
{
path[i][j]=INF;
char c;
cin>>c; if(c!='N')
{
path[i][j]=point;
point++;
}
}
}
}
bool v[MAXN];
void dijkstra()
{
memset(v,,sizeof(v));
dp[]=;int x=;
for(int i=;i<n;++i)
{
long long mini=INF;
for(int j=;j<n;++j)
{
if(!v[j]&&dp[j]<mini)
{
mini=dp[j];
x=j;
}
}v[x]=;
for(int j=;j<n;++j)
{
dp[j]=min(dp[j],dp[x]+path[x][j]);
}
} if(dp[n-]==INF)cout<<"-1"<<endl;
else cout<<dp[n-]<<endl;
} int main()
{
cin.sync_with_stdio(false);
cin>>cases;
for(int itee=;itee<cases;++itee)
{
init();
dijkstra();
}
return ;
}
两行代码的解决方案:
#include<bits/stdc++.h>
using namespace std;long long cases,n,m;const long long MAXN=+;const long long INF=1e12+;long long path[MAXN][MAXN];long long dp[MAXN];void init(){ cin>>n; for(int i=;i<n;++i) { dp[i]=INF;long long point=; for(int j=;j<n;++j) { path[i][j]=INF; char c; cin>>c; if(c!='N') { path[i][j]=point; point++; } } }}bool v[MAXN];void dijkstra(){ memset(v,,sizeof(v)); dp[]=;int x=; for(int i=;i<n;++i) { long long mini=INF; for(int j=;j<n;++j) { if(!v[j]&&dp[j]<mini) { mini=dp[j]; x=j; } }v[x]=; for(int j=;j<n;++j) { dp[j]=min(dp[j],dp[x]+path[x][j]);}} if(dp[n-]==INF)cout<<"-1"<<endl; else cout<<dp[n-]<<endl;}int main(){ cin.sync_with_stdio(false); cin>>cases; for(int itee=;itee<cases;++itee) { init(); dijkstra(); } return ;}
51nod_1445 变色DNA 最短路模板 奇妙思维的更多相关文章
- 51nod 1445:变色DNA 最短路变形
1445 变色DNA 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 有一只特别的狼,它在每个夜晚会进行变色,研究发现 ...
- 变色DNA(最短路思维题)
个人心得:太水了,还是对最短路不太深入了解,无法构建出最短路模板,然后就是读题能力, 这题的关键在于转换为最短路模板,因为DFS我在24组超时了. 假设把从i到j的代价看做是权值,那么就是对权值的确立 ...
- 51nod 1445 变色DNA(dij)
题目链接:51nod 1445 变色DNA 看了相关讨论再去用最短路:val[i][j]之间如果是'Y',说明i可以到达j,并且i到达j的代价是i那行 1到j-1 里面'Y'的数量. 最后,求 0到n ...
- 51NOD 1445 变色DNA
1445 变色DNA 有一只特别的狼,它在每个夜晚会进行变色,研究发现它可以变成N种颜色之一,将这些颜色标号为0,1,2...N-1.研究发现这只狼的基因中存在一个变色矩阵,记为colormap,如果 ...
- POJ 2449Remmarguts' Date K短路模板 SPFA+A*
K短路模板,A*+SPFA求K短路.A*中h的求法为在反图中做SPFA,求出到T点的最短路,极为估价函数h(这里不再是估价,而是准确值),然后跑A*,从S点开始(此时为最短路),然后把与S点能达到的点 ...
- poj1511/zoj2008 Invitation Cards(最短路模板题)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Invitation Cards Time Limit: 5 Seconds ...
- k短路模板 POJ2449
采用A*算法的k短路模板 #include <iostream> #include <cstdio> #include <cstring> #include < ...
- HDU 5521.Meeting 最短路模板题
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven(第k短路模板)
求第k短路模板 先逆向求每个点到终点的距离,再用dij算法,不会超时(虽然还没搞明白为啥... #include<iostream> #include<cstdio> #inc ...
随机推荐
- MVC学习6 学习使用Code First Migrations功能 把Model的更新同步到DB中
参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-new-field-to-th ...
- 使用pycharm 运行python的django项目时报错“Quit the server with CTRL-BREAK.”
Quit the server with CTRL-BREAK.Error: [Errno 10013] 1昨晚测试时还好好的,怎么突然出现这个错误,于是GOOLE,找到个帖子说可能是端口占用了,用工 ...
- Java面向对象的练习。动物乐园
本次项目是:以面向对象的思想设计动物乐园系统. 动物乐园中有猫,狗,鸭子等成员,还可以增加新成员. 猫和鸭子都有自己的名字,都有自己的腿,但腿的条数不同,猫和鸭子会发出叫声,猫的叫声是:喵喵喵……,鸭 ...
- springMvc 添加定时任务
1.创建定时类 import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stere ...
- Vue.js(2.x)之计算属性
昨天看完大神的文章后,深感惭愧,硬着头皮继续看官网文档,然而这真的没是没办法,介绍的实在有些敷衍: 1).计算属性:也不说下computed是计算属性关键词,vm实例是可以像代理data一样代理com ...
- js绑定事件方法:addEventListener的兼容问题
js的事件绑定方法中,ie只支持attachEvent,而FF和Chrome只支持addEventListener;严格来说:addEventListener只有IE9以上版本的IE浏览器上能够兼容, ...
- Oracle SQL Developer-3.2.20.09.87 Windows 10启动问题处理&配置
用了好多年的工具,准备在笔记本上使用时启动不了,但在办公室PC上可以正常使用.两者电脑OS都一样,一个是全新安装.一个是从Windows 7升级而来.下载了最新版发现版本到17了,Oracle刷版本号 ...
- 构建第一个Spring Boot2.0应用之项目创建(一)
1.开发环境 IDE: JAVA环境: Tomcat: 2.使用Idea生成spring boot项目 以下是使用Idea生成基本的spring boot的步骤. (1)创建工程第一步 (2)创建工 ...
- UOJ#126【NOI2013】快餐店
[NOI2013]快餐店 链接:http://uoj.ac/problem/126 YY了一个线段树+类旋转卡壳的算法.骗了55分.还比不上$O(n^2)$暴力T^T 题目实际上是要找一条链的两个端点 ...
- JavaScript and Ruby in ABAP
Netweaver里有个mini JavaScript engine CL_JAVA_SCRIPT, 对于Js code的编译和执行都是用system call完成. 只能当玩具用:report SJ ...