RT,我开unsigned long longWA在第八个测试点,开了long long就过了?
另附ull和ll的代码:
ull(WA在第八个测试点):
#include <iostream>
#include <queue>
#include <vector>
#define int unsigned long long
#define MAXN 15001
#define INF 1e18
using namespace std;
struct edge{
int v,w;
edge(int a,int b){
v=a;
w=b;
}
};
vector<edge> v[MAXN];
queue<int> q;
bool b[MAXN];
int n,m;
int dis[MAXN];
void spfa(){
for(int i=1;i<=n;i++) dis[i]=INF;
dis[1]=0;
b[1]=1;
q.push(1);
while(!q.empty()){
int p=q.front();
q.pop();
b[p]=0;
for(int i=0;i<v[p].size();i++){
int np=v[p][i].v;
if(dis[np]>dis[p]+v[p][i].w){
dis[np]=dis[p]+v[p][i].w;
if(!b[np]){
q.push(np);
}
b[np]=1;
}
}
}
}
signed main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u0,v0,w0;
cin>>u0>>v0>>w0;
v[u0].push_back(edge(v0,w0));
}
spfa();
for(int i=1;i<=n;i++){
if(dis[i]==INF) cout<<"-1 ";
else cout<<dis[i]<<" ";
}
return 0;
}
ll(AC):
#include <iostream>
#include <queue>
#include <vector>
#define int long long
#define MAXN 15001
#define INF 1e18
using namespace std;
struct edge{
int v,w;
edge(int a,int b){
v=a;
w=b;
}
};
vector<edge> v[MAXN];
queue<int> q;
bool b[MAXN];
int n,m;
int dis[MAXN];
void spfa(){
for(int i=1;i<=n;i++) dis[i]=INF;
dis[1]=0;
b[1]=1;
q.push(1);
while(!q.empty()){
int p=q.front();
q.pop();
b[p]=0;
for(int i=0;i<v[p].size();i++){
int np=v[p][i].v;
if(dis[np]>dis[p]+v[p][i].w){
dis[np]=dis[p]+v[p][i].w;
if(!b[np]){
q.push(np);
}
b[np]=1;
}
}
}
}
signed main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u0,v0,w0;
cin>>u0>>v0>>w0;
v[u0].push_back(edge(v0,w0));
}
spfa();
for(int i=1;i<=n;i++){
if(dis[i]==INF) cout<<"-1 ";
else cout<<dis[i]<<" ";
}
return 0;
}