POJ 2387 Til the Cows Come Home - (Dijkstra)

2023-10-17 23:34
文章标签 poj dijkstra home cows 2387 til come

本文主要是介绍POJ 2387 Til the Cows Come Home - (Dijkstra),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:http://poj.org/problem?id=2387

Dijkstra模板题,不过话说今天做了几个就这一个AC,其他全部WA,也是很迷。。。

#include <stdio.h>  
#include <vector>   
#include <algorithm>
#include <queue>
using namespace std;//POJ 2387 Til the Cows Come Home
const int MAX = 0x7fffffff;typedef struct {const bool operator()(const pair<int, int>& lhs, const pair<int, int>& rhs)const{return lhs.first >= rhs.first;}
}Comp;int main()
{int T, N;scanf("%d%d", &T, &N);int** path = new int*[N];int* distance = new int[N];distance[0] = 0;for (int i = 0; i < N; ++i){path[i] = new int[N];distance[i] = MAX;}for (int i = 0; i < N; ++i)for (int j = 0; j < N; ++j)path[i][j] = MAX;for (int i = 0; i < T; ++i){int s, t, length;scanf("%d%d%d", &s, &t, &length);s--; t--;if (path[s][t] > length)path[s][t] = path[t][s] = length;}//Dijkstrabool* mark = new bool[N];for (int i = 0; i < N; ++i)mark[i] = false;typedef int length;typedef int num;std::priority_queue<std::pair<length, num>, std::vector<pair<length, num> >, Comp> pq;pq.push(std::make_pair(0, 0));while (!mark[N - 1]){const std::pair<length, num> intersection = pq.top(); pq.pop();const int length = intersection.first;const int num = intersection.second;if (mark[num])continue; //to avoid computing the same point, the reason is as below.mark[num] = true;distance[num] = length;for (int i = 0; i < N; ++i){if (mark[i] || path[num][i] == MAX)continue;const int dis = distance[num] + path[num][i];if (dis < distance[i]){distance[i] = dis;//so the same point "i" might be push more than once.pq.push(std::make_pair(dis, i));}}}printf("%d\n", distance[N - 1]);for (int i = 0; i < N; ++i)delete[] path[i];delete[] path;delete[] distance;delete[] mark;system("pause");return 0;
}

这篇关于POJ 2387 Til the Cows Come Home - (Dijkstra)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/228698

相关文章

Offending ECDSA key in /home/lierjun/.ssh/known_hosts:1

问题描述: 使用终端进行远程连接linux 连接格式:ssh root@ip 结果发出警告信息,信息提示: Offending ECDSA key in /home/user/.ssh/known_hosts:1 解决办法: cd /home/user/.ssh cat known_hosts sed -i '1d' known_hosts 然后再次进行链接可以了

poj 3882(Stammering Aliens) 后缀数组 或者 hash

后缀数组:  构建后缀数组,注意要在字符串莫末尾加上一个没出现过的字符。然后可以2分或者直接扫描,直接扫描需要用单调队列来维护 VIEW CODE #include<cstdio>#include<algorithm>#include<iostream>#include<cmath>#include<queue>#include<stack>#include<string

poj 3294(Life Forms) 2分+ 后缀数组

我曾用字符串hash写,但是超时了。只能用后最数组了。大致思路:用不同的符号吧字符串连接起来,构建后缀数组,然后2分答案,依次扫描后缀数组,看是否瞒住条件。 VIEW CODE #include<cstdio>#include<vector>#include<cmath>#include<algorithm>#include<cstring>#include<cassert>#

poj 2391 Ombrophobic Bovines (网络流)

这是一道很经典的网络流的题目。首先我们考虑假如我们的时间为无穷大。我们吧每个点拆成2个点 i和i' .。虚拟源点s和汇点t。对于每个点建边(s,i, a[i])  (i‘,t,ib[i]) 。 其中a[i]为给点有多少牛,b[i]为容量。i和j连通 建边 (i,j',inf);如果最大流==所有牛的个数,就可能装下所有的牛。那么现在我们考虑时间。假设最大时间为T.那么如果i到j的的最短时间>T

poj 1330 LCA 最近公共祖先

水题目。直接上代码了。 VIEW CODE #include<cstdio>#include<algorithm>#include<iostream>#include<cmath>#include<queue>#include<stack>#include<string>#include<cstring>#include<map>#include<vector>#

poj 3160 Father Christmas flymouse 强连通+dp

首先我们可以确定的是,对于val值小于0的节点都变成0.   假设一个集合内2个房间都能任意到达,那么我就可以吧集合内的所有点的价值都取到,并且可以达到任一点。实际上集合内的每个点是相同的,这样的集合就是一个强连通分量。 那么我们就可以用tarjin算法进行强连通缩点, 最后形成一个dag的图。在dag的图上面进行dp。可以先用拓扑排序后dp。或者建反响边记忆化搜索 。 VIEW

Android中屏蔽 电源键长按、Home键、Home长按

“电源键长按”(globalscreen) “Home键”(homekey) “Home长按”(recentapps) 我们可以使用广播来实现,如: [java]  view plain copy print ? package com.jumpinus.test; import android.app.Activity; import android.content.Broadc

Java环境变量配置中有关JAVA_HOME,path,Classpath含义的讲解

一:Path变量 Path变量是操作系统的,用以找寻相关命令的。例如ping这个命令,你能在控制行里打ping 127.0.0.1而有程序执行并正确返回结果,是因为Path变量包含C:\Windows\System32。你可以在Path中把C:\Windows\System32去掉,再使用ping命令,就会提示找不到ping命令。 这就像你在你的办公桌上工作,需要用到各种工具,如钢笔,

Maven和JAVA_HOME的关系

在Java开发中,Maven和JAVA_HOME是两个关键的概念,它们在构建和运行Java应用程序时具有不同的角色,但却相互关联。以下是它们的关系和各自的作用: JAVA_HOME 定义和作用: JAVA_HOME是一个环境变量,它指向JDK(Java Development Kit)的安装目录。系统通过JAVA_HOME知道在哪里找到Java编译器(javac)、Java虚拟机(java)

poj 1564 Sum It Up -- DFS 递归

题意:给一个数 t ,以及 n 个数,求 n 个数中的几个数加起来的和为 t 的情况有多少种。 注意:题目要求相同的组合方式不能出现2次,即 “3 4 1 1 1 1 ” 的结果为:“1+1+1”。 思路:一个  for  循环遍历一遍,每个 i 表示以当前数为起点开始一次DFS递归,当所遍历的和为 t 时,输出该组合方式,如果大于 t 则返回,小于则往下递归。以二维数组保存已经输出过的数据,