简单题

 /*
简单的bfs
*/
#include<algorithm>
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<queue>
#include<stack>
#include<map>
#include<set>
using namespace std;
typedef long long int64;
//typedef __int64 int64;
typedef pair<int64,int64> PII;
#define MP(a,b) make_pair((a),(b))
const int inf = 0x3f3f3f3f;
const double pi=acos(-1.0);
const int dx[]={,-,,};
const int dy[]={,,,-};
const double eps = 1e-;
const int maxm = ;
const int maxn = ;
struct Edge{
int u,v,next,val;
}edge[ maxm* ];
int cnt ,head[ maxn ];
bool vis[ maxn ];
int dis1[ maxn ],dis2[ maxn ],girl[ maxn ];
//int dp[ maxn ];
queue<int>q;
//int pre[ maxn ];
void init(){
cnt = ;
memset( head,-,sizeof( head ) );
}
void addedge( int a,int b,int c ){
edge[ cnt ].u = a;
edge[ cnt ].v = b;
edge[ cnt ].val = c;
edge[ cnt ].next = head[ a ];
head[ a ] = cnt ++;
} int spfa( int n ){
while( !q.empty() )
q.pop();
//memset( pre,-1,sizeof( pre ) );
memset( vis,false,sizeof( vis ) );
memset( dis1,0x3f,sizeof( dis1 ) );
memset( dis2,0x3f,sizeof( dis2 ) );
vis[ ] = true;
q.push( );
dis1[ ] = ;
dis2[ ] = girl[ ];
//for( int i=head[1];i!=-1;i=edge[i].next ){
// pre[ edge[i].v ] = 1;
//}
while( !q.empty() ){
int cur = q.front();
q.pop();
vis[ cur ] = false;
for( int i=head[cur];i!=-;i=edge[i].next ){
int nxt = edge[ i ].v;
if( dis1[nxt]>dis1[cur]+edge[i].val ){
dis1[nxt] = dis1[cur]+edge[i].val;
//pre[ nxt ] = cur;
dis2[nxt] = dis2[cur]+girl[edge[i].v];
if( !vis[nxt] ){
vis[nxt] = true;
q.push( nxt );
}
}
else if( dis1[nxt]==dis1[cur]+edge[i].val ){
if( dis2[nxt]<dis2[cur]+girl[edge[i].v] ){
//pre[ nxt ] = cur;
dis2[nxt]=dis2[cur]+girl[edge[i].v];
if( !vis[nxt] ){
vis[nxt] = true;
q.push( nxt );
}
}
}
}
}
//printf("dis1[ %d ] = %d\n",n,dis1[n]);
if( dis1[n]>=0x3f3f3f3f ) return -;
else return dis2[ n ];
/*
int ans = 0;
int cur = n;
while( 1 ){
ans += girl[ cur ];
cur = pre[ cur ];
if( cur==-1 ){
break;
}
}
return ans;
*/
} int main(){
int n;
while( scanf("%d",&n)== ){
int m;
scanf("%d",&m);
for( int i=;i<=n;i++ )
scanf("%d",&girl[i]);
int a,b,c;
init();
while( m-- ){
scanf("%d%d%d",&a,&b,&c);
//if( a==b ) continue;
addedge( a,b,c );
addedge( b,a,c );
}
printf("%d\n",spfa( n ) );
}
return ;
}

CSU1321+SPFA的更多相关文章

  1. 【BZOJ-3627】路径规划 分层图 + Dijkstra + spfa

    3627: [JLOI2014]路径规划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 186  Solved: 70[Submit][Status] ...

  2. POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)

    传送门 Til the Cows Come Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 46727   Acce ...

  3. sgu 240 Runaway (spfa)

    题意:N点M边的无向图,边上有线性不下降的温度,给固定入口S,有E个出口.逃出去,使最大承受温度最小.输出该温度,若该温度超过H,输出-1. 羞涩的题意 显然N*H的复杂度dp[n][h]表示到达n最 ...

  4. spfa模板

    通过stl的queue实现的spfa(vector实现邻接表存图) 本模板没有考虑存在两点不连通的情况 如果需要判断则需要用到并查集或者遍历整个邻接表 #include<iostream> ...

  5. SPFA

    SPFA算法用来求单源最短路.可以处理任何有解的情况. 先建一个数组\(dist_x = 起点到x的最短路长度\),当\(x=起点\)时为0,当x和起点不通时为INF(本题中为\(2^31-1\)). ...

  6. BZOJ2763 [JLOI2011]飞行路线(SPFA + DP)

    题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=2763 Description Alice和Bob现在要乘飞机旅行,他们选择了一家 ...

  7. bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)

    数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...

  8. bzoj 1179[Apio2009]Atm (tarjan+spfa)

    题目 输入 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每行一 ...

  9. codevs 1021 玛丽卡(spfa)

    题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们 ...

随机推荐

  1. 第十三篇、Swift_Nav自定义返回按钮后或者隐藏导航栏,Pop返回手势失效的解决方法 Pop全局返回添加的方法

    边缘的pop返回手势: override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = UIColor.purple ...

  2. DP入门数塔问题

    在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?        已经告诉你了,这 ...

  3. java学习笔记_GUI(2)

    import javax.swing.*; import java.awt.event.*; class Gui implements ActionListener{ JButton button = ...

  4. Windows Phone 8.1 页面导航

    1. Windows Phone 8.1 的应用框架 一个应用拥有 1 个 Window,一个 Window 包含 1 个 Frame,一个 Frame 包含 多个 Page. 获取 Frame 的方 ...

  5. apache重写字段详细说明

    用Apache虚拟主机的朋友很多,apache提供的.htaccess模块可以为每个虚拟主机设定rewrite规则,这对网站SEO优化相当有用,同时也改善了用户体验.国内的虚拟机一般不提供.htacc ...

  6. 关于AjaxPro的用法

    1.添加引用AjaxPro.2.dll到项目中 2.添加webconfig iis6添加 在<system.web>中添加: <httpHandlers> <add ve ...

  7. DTCMS一些问题

    站点管理,主站和手机站同时绑定不同域名 手机站会报错,解决方法为 主站不绑定 手机站绑定 关键问题为:不能和主站域名相同 PC模版文件下的JS文件夹下的commen.js和手机模版下的JS文件夹下的b ...

  8. artdialog 提示 确定或取消

    dialog({ title:'提示', content:"下载需扣除" + point + "个积分<br />重复下载不扣积分,需要继续吗?", ...

  9. 【ZeroMQ】消息模式

    1.请求/应答模式(REP/REQ) 该模式特征: 服务器使用REP类型套接字而客户端使用REQ类型套接字 客户端发送请求和接收答复,而服务器则接收请求并发送答复 客户端可以连接到一个或多个服务器.在 ...

  10. PHP中使用Luhn算法校验信用卡及借记卡卡号

    Luhn算法会通过校验码对一串数字进行验证,校验码通常会被加到这串数字的末尾处,从而得到一个完整的身份识别码. 我们以数字“7992739871”为例,计算其校验位: 从校验位开始,从右往左,偶数位乘 ...