题目描述 天网恢恢,疏而不漏,经过上一次的抓捕,OI总部终于获取了怪盗的特征!现在,我们需要在基德再次来之前就把他的特征送到超级大牛的手上,可惜超级大牛不在总部.所以飞过海必须尽快把资料送到大牛家里.已知OI总部到大牛家中间有 � − 2 n−2个城城市,为了尽快达到目的地,飞过海通过水晶球(够先进吧)了解到OI总部到大牛家的路线图,图上显示了 � n个城之间的连接距离。 可是飞过海很忙,需要请你来帮忙写个程序.
输入格式 第一行 � n第二行到第n+1行 每行 � n个数字(第 � + 1 i+1行,表示第 � i个城市与其他城市之间的连接关系 0 表示不连接 其他数字表示连接的距离 )
输出格式 第1行 � n个用空格间隔的整数表示所选的线路第2行一个数字最短距离
样例一 input 7 0 3 5 0 0 0 0 0 0 0 7 8 6 0 0 0 0 0 4 5 0 0 0 0 0 0 0 4 0 0 0 0 0 0 7 0 0 0 0 0 0 6 0 0 0 0 0 0 0 output 1 2 4 7 14 限制与约定 对于100%的数据, � ≤ 1000 n≤1000
时间限制: 1 s 1s
空间限制: 256 MB 256MB
#include<bits/stdc++.h>
using namespace std;
struct node
{
long long zx;
long long bq;
};
vector<node>tu[1005];
queue<int >q;
long long a , out[1005] = { } , jl[1005] = { };
int main()
{
for(long long i = 2 ; i <= 1005 ; i++)
{
jl[i] = 10000007;
}
jl[1] = 0;
scanf("%lld",&a);
for(long long i = 1 ; i <= a ; i++)
{
for(long long j = 1 ; j <= a ; j++)
{
long long val;
if(scanf("%lld",&val))
{
tu[i].push_back((node){j , val});
out[i]++;
}
}
}
// SPFA
q.push(1);
while(!q.empty())
{
long long z = q.front();
q.pop();
for(long long i = 0 ; i < out[z] ; i++)
{
if(jl[tu[z][i].zx] > jl[z] + tu[z][i].bq)
{
jl[tu[z][i].zx] = jl[z] + tu[z][i].bq;
q.push(tu[z][i].zx);
}
}
}
printf("%lld",jl[a]);
return 0;
}
一直是0.。。