poj 2378 (dijkstra)
http://poj.org/problem?id=2387
一个dijkstra的模板题
#include <stdio.h>
#include <string.h>
#define inf 999999; int graph[ ][ ];
bool mark[ ];
int m,n; void dijkstra()
{
int d[ ],k,Min;
bool mark[ ];
for(int i = ; i <= n ; i++) //对d[i]进行初始化
{
mark[ i ] = false;
d[ i ] = graph[ ][ i ];
}
for(int i = ; i <= n ; i++)
{
Min=inf;
for(int j = ; j <= n ; j++)
{
if(!mark[ j ] && d[ j ] < Min)
{
k = j;
Min = d[ j ];
}
}
mark[ k ] = true; for(int j = ; j <= n ; j++)
{
if(!mark[ j ] && d[ j ] > graph[ k ][ j ] + d[ k ])
d[ j ] = graph[ k ] [ j ] + d[ k ];
}
}
printf("%d\n",d[n]);
} int main()
{
int a,b,c;
while(~scanf("%d%d",&m,&n)){
for(int i = ; i <= n ; i++)
for(int j = ; j <= n ; j++)
if(i == j)
graph[ i ][ j ] = ;
else
{
graph[ i ][ j ] = inf;
graph[ j ][ i ] = inf;
}
for(int i = ; i <= m ;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(graph[ a ][ b ] > c)
{
graph[ a ][ b ] = c;
graph[ b ][ a ] = c;
}
}
dijkstra();
}
return ;
}
dijkstra +head
const int N=;
struct rec
{
int v,w;//v代表所连的值,W代表权值
}; vector<rec> edge[N*N];
int n,st,ed;
long long dis[N*N];
bool vis[N*N]; struct cmp
{
bool operator()(int a,int b)
{
return dis[a]>dis[b];
}
}; void Dijkstra()
{
priority_queue<int,vector<int>,cmp> Q;
memset(dis,-,sizeof(dis));
memset(vis,,sizeof(vis));
int i,u,v;
Q.push(st);
dis[st]=;
while(!Q.empty())
{
u=Q.top();
Q.pop();
vis[u]=;
if(u==st)
break;
if(dis[v]==- || dis[v]<dis[u]*edge[u][i].w)
{
dis[v]=dis[u]*edge[u][i].w;
if(!vis[v])
{
vis[v]=;
Q.push(v);
}
}
}
}
}
for(i=; i<edge[u].size(); i++)
{
v=edge[u][i].v;
if(dis[v]==- || dis[v]<dis[u]*edge[u][i].w)
{
dis[v]=dis[u]*edge[u][i].w;
if(!vis[v])
{
vis[v]=;
Q.push(v);
}
}
}
}
}
poj 2378 (dijkstra)的更多相关文章
- Tree Cutting POJ - 2378 (树形DP)
题目链接:POJ - 2378 题目大意:给你n个点,然后问你这n个点中 ,去除哪些点能够使得剩下的图中最大的连通块中点的个数不超过n/2. 具体思路:第一遍dfs记录每一个点代表的子树大小,第二遍d ...
- POJ 2378 Tree Cutting 3140 Contestants Division (简单树形dp)
POJ 2378 Tree Cutting:题意 求删除哪些单点后产生的森林中的每一棵树的大小都小于等于原树大小的一半 #include<cstdio> #include<cstri ...
- POJ 1062 ( dijkstra )
http://poj.org/problem?id=1062 一个中文题,一个多月之前我做过,当时我是用搜索写的,不过苦于卡在无法确定等级关系,所以就错了. 看了别人的博客后,我还是不是很理解所谓的枚 ...
- poj 2378(树形dp)
题目链接:http://poj.org/problem?id=2378 思路:num[u]表示以u为根的子树的顶点个数(包括),如果去掉u之后u的每棵子树都小于等于n/2,则选择u. #include ...
- Poj(2253),Dijkstra松弛条件的变形
题目链接:http://poj.org/problem?id=2253 题意: 给出两只青蛙的坐标A.B,和其他的n-2个坐标,任一两个坐标点间都是双向连通的.显然从A到B存在至少一条的通路,每一条通 ...
- Poj(1797) Dijkstra对松弛条件的变形
题目链接:http://poj.org/problem?id=1797 题意:从路口1运货到路口n,最大的运货重量是多少?题目给出两路口间的最大载重. 思路:j加到s还是接到K下面,取两者的较大者,而 ...
- POJ 2378 Tree Cutting (DFS)
题目链接:http://poj.org/problem?id=2378 一棵树,去掉一个点剩下的每棵子树节点数不超过n/2.问有哪些这样的点,并按照顺序输出. dfs回溯即可. //#pragma c ...
- POJ 2378.Tree Cutting 树形dp 树的重心
Tree Cutting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4834 Accepted: 2958 Desc ...
- hdu 2544 hdu 1874 poj 2387 Dijkstra 模板题
hdu 2544 求点1到点n的最短路 无向图 Sample Input2 1 //结点数 边数1 2 3 //u v w3 31 2 52 3 53 1 20 0 Sample Output32 ...
随机推荐
- 1.servlet的会话机制cookie
会话:用户开浏览器访问某个网站,只要不关闭浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个过程称为一次会话 cookie会话: 1.记录用户上次登录的时间 2.浏览商品的历史 ...
- CLR 公共语言运行库
1..支持多语言..只是语言是面向CLR的..均可以在此基础上运行. 2..程序集加载..程序打包之后的Dll文件由CLR(公共语言运行库)来编译并加载到可以执行状态..由CLR(公共语言运行库)加载 ...
- 基于php使用memcache存储session的详解(转)
web服务器的php session都给memcached ,这样你不管分发器把 ip连接分给哪个web服务器都不会有问题了,配置方法很简单,就在php的配置文件内增加一条语句就可以了,不过前提你需要 ...
- thinkphp 完整配置config.php
ThinkPHP的系统配置都采用数组形式,配置文件地址:Bin/Conf/config.php CHECK_FILE_CASE -- windows环境下面的严格检查大小写. /* 项目设定 ...
- readline
注意,向后表示向左,向前表示向右. "\C-f": forward-char 光标向右一个字符 "\C-b": backward-char 光标向左一个字符 ...
- Javascript设计模式详解
Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...
- Jquery Md5加密解密
首先需要调用md5解析的js文件.(右击-目标另存为方式下载) http://files.cnblogs.com/files/colinliu/md5.js 加密方法参考: <script ty ...
- solrcloud
@Test public void querySolrCloud(){ String zkHost = "127.0.0.1:2181"; String defaultCollec ...
- VC++ 6.0使用定时器SetTimer;
背景: windows中使用VC++6.0制作了个交互界面向下位机定时发送数据及显示下位机上传的数据.定时发送则需要使用定时器. 本文只做记录如何调用,原理以后再深究. 正文: 首先,我生成的窗体类名 ...
- bootstrap搜索框样式代码及效果
<div class="container"> <div class="input-group"> <input type=&qu ...