简单题

 /*
简单的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. 第三十六篇、webService

    在很多的情况下,我们会常常遇到webservive写的接口,往往这种情况下,我们就需要拼接一段报文去与服务器对接 首先要明白webService的工作原理,,,(http://www.cnblogs. ...

  2. OC9_文件操作

    // // main.m // OC9_文件操作 // // Created by zhangxueming on 15/6/19. // Copyright (c) 2015年 zhangxuemi ...

  3. (转)印度建全球最大生物识别数据库,MongoDB安全受质疑

    受棱镜门影响,各界对Aadhar的质疑从是否将威胁人民隐私与安全,转而聚焦在 Aadhar 搜集.储存以及处理资料的方法,以及美国新创公司 MongoDB 在计划中扮演的角色. 泱泱大国印度一直以来都 ...

  4. String 转Clob

    把String转Clob java.sql.Clob c = new javax.sql.rowset.serial.SerialClob("abc".toCharArray())

  5. Poj 3982 序列

    1.Link: http://poj.org/problem?id=3982 2.Content: 序列 Time Limit: 1000MS   Memory Limit: 65536K Total ...

  6. linux gcc 和 g++ 编译

    gcc编译 gcc -o test.out test.c g++ 编译 g++ -o test.out test.cpp

  7. Headfirst设计模式的C++实现——复合模式

    observer.h #ifndef _OBSERVER_H_ #define _OBSERVER_H_ #include <string> class Observer { public ...

  8. hash桶

    #include <stdio.h> #include <stdlib.h> #include "chain.c" //include the chain. ...

  9. This bison version is not supported for regeneration of the Zend/PHP parsers

    在 mac 中编译 php-src.git 报错: configure: WARNING: This bison version is not supported , excluded: ). con ...

  10. Oracle 内核参数

    安装Oracle的时候,可以参考Oracle 的安装文档,来设置相关内核参数的值,但是有些参数的值还是需要根据我们自己的情况来进行调整.注:不同系统的参数不同,本篇针对linux. 一.Linux 系 ...