这是一道最短路模板题,但是在理解题意和提出模型的阶段比较考验思维,很容易想到并且深深进入暴力拆解题目的无底洞当中。

题意是说:给出一个邻接矩阵,在每个点时,走且仅走向,合法路径中编号最小的点。问题是是否能够从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 最短路模板 奇妙思维的更多相关文章

  1. 51nod 1445:变色DNA 最短路变形

    1445 变色DNA 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有一只特别的狼,它在每个夜晚会进行变色,研究发现 ...

  2. 变色DNA(最短路思维题)

    个人心得:太水了,还是对最短路不太深入了解,无法构建出最短路模板,然后就是读题能力, 这题的关键在于转换为最短路模板,因为DFS我在24组超时了. 假设把从i到j的代价看做是权值,那么就是对权值的确立 ...

  3. 51nod 1445 变色DNA(dij)

    题目链接:51nod 1445 变色DNA 看了相关讨论再去用最短路:val[i][j]之间如果是'Y',说明i可以到达j,并且i到达j的代价是i那行 1到j-1 里面'Y'的数量. 最后,求 0到n ...

  4. 51NOD 1445 变色DNA

    1445 变色DNA 有一只特别的狼,它在每个夜晚会进行变色,研究发现它可以变成N种颜色之一,将这些颜色标号为0,1,2...N-1.研究发现这只狼的基因中存在一个变色矩阵,记为colormap,如果 ...

  5. POJ 2449Remmarguts' Date K短路模板 SPFA+A*

    K短路模板,A*+SPFA求K短路.A*中h的求法为在反图中做SPFA,求出到T点的最短路,极为估价函数h(这里不再是估价,而是准确值),然后跑A*,从S点开始(此时为最短路),然后把与S点能达到的点 ...

  6. poj1511/zoj2008 Invitation Cards(最短路模板题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Invitation Cards Time Limit: 5 Seconds    ...

  7. k短路模板 POJ2449

    采用A*算法的k短路模板 #include <iostream> #include <cstdio> #include <cstring> #include < ...

  8. HDU 5521.Meeting 最短路模板题

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  9. ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven(第k短路模板)

    求第k短路模板 先逆向求每个点到终点的距离,再用dij算法,不会超时(虽然还没搞明白为啥... #include<iostream> #include<cstdio> #inc ...

随机推荐

  1. RS485相关学习

    TIA-485-A (Revision of EIA-485) Standard ANSI/TIA/EIA-485-A-1998Approved: March 3, 1998Reaffirmed: M ...

  2. <Openssl下hash函数>

    hash函数:是不可逆的函数,它的输入可以是任意长度的字节流.它的输出是固定大小的,hash函数的作用就是给你的文件产生一个摘要,它是独一无二的. 例如:y=f(x) x代表输入  y代表输出   输 ...

  3. 最简实例演示asp.net5中用户认证和授权(3)

    上接: 最简实例演示asp.net5中用户认证和授权(2) 在实现了角色的各种管理接口后,下一步就是实现对用户的管理,对用户管理的接口相对多一些,必须要实现的有如下三个: 1 public inter ...

  4. Catch the moments of your life. Catch them while you're young and quick.

    Catch the moments of your life. Catch them while you're young and quick.趁你还年轻利落,把握住生活中的美好瞬间吧!

  5. 异步加载js的3种方式

    默认情况javascript是同步加载的,也就是javascript的加载时阻塞的,后面的元素要等待javascript加载完毕后才能进行再加载,对于一些意义不是很大的javascript,如果放在页 ...

  6. C++ int转string / string转int

    c++ 最近标准添加了stringstream类,可以非常简单的对int 和 string 进行相互的转化 //int 转 string void int2str(const int& i, ...

  7. webapplication发布

    在vs2010里写的 ASP.NET Web Application 发布步骤: ①:右击Web Application项目可以看到发布,弹出的对话框里选择要发布的路径,路径选择一个容易记住的地址即可 ...

  8. JS修改地址栏参数实例代码

    function changeURLPar(destiny, par, par_value) { var pattern = par+'=([^&]*)'; var replaceText = ...

  9. oracle 11g r2卸载

    1. 进入计算机管理>>服务里,停止所有oracle的服务 2. 开始菜单>>程序>>Oracle>>Oracle安装产品>>Univers ...

  10. Java分代的思考

    我们都知道,java的gc是基于java的分代前提,不管是CMS还是G1,都是基于分代思想:老年代和新生代 思考一:为什么可以分代? 1.java中对象的生命周期是不一样的,在gc中对应年龄的概念. ...