| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
bellman神奇的WA,以及神奇的fix。求解AC代码和WA的代码只差了一行bellman的松弛操作:
if (d[y] < INF) d[x] = min(d[x], d[y]+w[i]);
但我从来没有见过AC代码的写法...
到底为什么WA了呢?重边不会影响的啊
WA代码
=======================================================================
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
using namespace std;
const int MAX_V = 1005;
const int MAX_E = 2010;
const int INF = 0x7fffffff;
int d[MAX_V];//s到各点的距离
int n, T;//注意n
int u[MAX_E], v[MAX_E], w[MAX_E];
void bellman_ford() {
for (int i = 0; i < n; i++) d[i] = INF;
d[0] = 0;
for (int k = 0; k < n; k++) {
for (int i = 0; i < T; i++) {
int x = u[i], y = v[i];
if (d[x] < INF) d[y] = min(d[y], d[x]+w[i]);
}
}
}
int main()
{
while (scanf("%d%d", &T, &n) == 2) {
for (int i = 0; i < T; i++) {
scanf("%d%d%d", &u[i], &v[i], &w[i]);
u[i]--;
v[i]--;
}
bellman_ford();
printf("%d\n",d[n-1]);
}
return 0;
}
=======================================================================
AC代码
=======================================================================
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
using namespace std;
const int MAX_V = 1005;
const int MAX_E = 2010;
const int INF = 0x7fffffff;
int d[MAX_V];//s到各点的距离
int n, T;//注意n
int u[MAX_E], v[MAX_E], w[MAX_E];
void bellman_ford() {
for (int i = 0; i < n; i++) d[i] = INF;
d[0] = 0;
for (int k = 0; k < n; k++) {
for (int i = 0; i < T; i++) {
int x = u[i], y = v[i];
if (d[x] < INF) d[y] = min(d[y], d[x]+w[i]);
if (d[y] < INF) d[x] = min(d[x], d[y]+w[i]);
}
}
}
int main()
{
while (scanf("%d%d", &T, &n) == 2) {
for (int i = 0; i < T; i++) {
scanf("%d%d%d", &u[i], &v[i], &w[i]);
u[i]--;
v[i]--;
}
bellman_ford();
printf("%d\n",d[n-1]);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator