POJ_1511_Invitation Cards(SPFA)
2013-10-14 14:52
246 查看
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
#define Max 1001
#define initVal -1
#define maxDist 101
int city1[Max][Max];
int city2[Max][Max];
bool visit1[Max];
bool visit2[Max];
int dist1[Max];
int dist2[Max];
int n; int m; int start;
queue< int > Q;
void init(){
memset( visit1, false, sizeof( visit1 ) );
memset( city1, initVal, sizeof( city1 ) );
memset( dist1, maxDist, sizeof( dist1 ) );
memset( visit2, false, sizeof( visit2 ) );
memset( city2, initVal, sizeof( city2 ) );
memset( dist2, maxDist, sizeof( dist2 ) );
int x, y;
for( int i = 0; i < m; ++i ){
cin >> x >> y;
cin >> city1[x][y];
city2[y][x] = city1[x][y];
}
}
void SPFA( int* dist, bool* visit, int city[Max][Max] ){
dist[start] = 0;
visit[start] = true;
Q.push( start );
while( !Q.empty() ){
int index = Q.front();
visit[index] = false;
Q.pop();
for( int i = 1; i <= n; ++i ){
if( city[index][i] != initVal && city[index][i] + dist[index] < dist[i] ){
dist[i] = city[index][i] + dist[index];
if(visit[i] == false){
visit[i] = true;
Q.push( i );
}
}
}
}
}
void show( int city[Max][Max] ){
for( int i = 1; i <= n; ++i ){
for( int j = 1; j <= n; ++j )
cout << city[i][j] << " ";
cout << endl;
}
}
int main(){
cin >> n >> m >> start;
init();
SPFA( dist1, visit1, city1 );
SPFA( dist2, visit2, city2 );
int mm = -1;
for( int i = 1; i <= n; ++i ){
dist1[i] += dist2[i];
if( mm < dist1[i] )
mm = dist1[i];
}
cout << mm << endl;
return 0;
}
#include <queue>
#include <cstring>
using namespace std;
#define Max 1001
#define initVal -1
#define maxDist 101
int city1[Max][Max];
int city2[Max][Max];
bool visit1[Max];
bool visit2[Max];
int dist1[Max];
int dist2[Max];
int n; int m; int start;
queue< int > Q;
void init(){
memset( visit1, false, sizeof( visit1 ) );
memset( city1, initVal, sizeof( city1 ) );
memset( dist1, maxDist, sizeof( dist1 ) );
memset( visit2, false, sizeof( visit2 ) );
memset( city2, initVal, sizeof( city2 ) );
memset( dist2, maxDist, sizeof( dist2 ) );
int x, y;
for( int i = 0; i < m; ++i ){
cin >> x >> y;
cin >> city1[x][y];
city2[y][x] = city1[x][y];
}
}
void SPFA( int* dist, bool* visit, int city[Max][Max] ){
dist[start] = 0;
visit[start] = true;
Q.push( start );
while( !Q.empty() ){
int index = Q.front();
visit[index] = false;
Q.pop();
for( int i = 1; i <= n; ++i ){
if( city[index][i] != initVal && city[index][i] + dist[index] < dist[i] ){
dist[i] = city[index][i] + dist[index];
if(visit[i] == false){
visit[i] = true;
Q.push( i );
}
}
}
}
}
void show( int city[Max][Max] ){
for( int i = 1; i <= n; ++i ){
for( int j = 1; j <= n; ++j )
cout << city[i][j] << " ";
cout << endl;
}
}
int main(){
cin >> n >> m >> start;
init();
SPFA( dist1, visit1, city1 );
SPFA( dist2, visit2, city2 );
int mm = -1;
for( int i = 1; i <= n; ++i ){
dist1[i] += dist2[i];
if( mm < dist1[i] )
mm = dist1[i];
}
cout << mm << endl;
return 0;
}
相关文章推荐
- poj 1511 Invitation Cards 静态邻接表的SPFA
- poj 1511 Invitation Cards 最短路SPFA(模板题)
- POJ 1511 Invitation Cards (堆优化Dij/SPFA
- HDU 1535 && POJ 1511 Invitation Cards (SPFA 模板 + 反向建图)
- POJ1511 Invitation Cards(SPFA)
- POJ 1511 SPFA+邻接矩阵 正图和反图相加
- poj 1511 Invitation Cards(spfa)
- POJ 1511 Invitation Cards【SPFA】
- POJ - 1511 Invitation Cards (SPFA最短路)
- SPFA邻接表-POJ-1511-Invitation Cards
- poj 1511----spfa
- poj 1511 Invitation Cards--SPFA
- POJ 1511 Invitation Cards【来回最短路+SPFA】
- poj1511_spfa
- poj 1511 Invitation Cards(spfa)
- POJ 1511 Invitation Cards //spfa
- poj 1511(SPFA+邻接表)
- poj1511 spfa
- poj 1511 spfa
- POJ 1511 Invitation Cards(spfa最短路)