#1 WA
查看原帖
#1 WA
387330
williaw楼主2021/9/29 18:32
#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
const int M=4000003;
int head[M],cnt=0;
struct edge{
	int next,to,w;
}e[M];
void add(int u,int v,int w){
	cnt++;
	e[cnt].w=w;
	e[cnt].to=v;
	e[cnt].next=head[u];
	head[u]=cnt;
}
int ans[M],dis[M];
bool vis[M],g[3000][3000];
int n,m;
void dij(){
	queue<int> q;
	for(int i=1;i<=n;i++) dis[i]=2e9;
	q.push(1);
	dis[1]=0;
	ans[1]=1;
	while(!q.empty()){
		int u=q.front();
		vis[u]=0;
		q.pop();
		for(int i=head[u];i;i=e[i].next){
			int v=e[i].to;
			if(dis[v]>dis[u]+e[i].w){
				dis[v]=dis[u]+e[i].w;
				ans[v]=ans[u];
				if(!vis[v]){
					vis[v]=1;
					q.push(v);
				}
			}
			else if(dis[v]==dis[u]+e[i].w){
				ans[v]+=ans[u];
			}
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		if(g[u][v]==0||g[u][v]>w) 
        {
            add(u,v,w);
            g[u][v]=w;
        }
	}
	dij();
	if(dis[n]==2e9) cout<<"No answer"<<endl;
	else cout<<dis[n]<<" "<<ans[n]<<endl;
	return 0;
}

数据给的是

输入:
5 5
1 2 1
2 3 1
3 4 1
4 5 1
1 4 3
输出:
4 2
2021/9/29 18:32
加载中...