【捞&同问】为什么本地跑对而交上去错?
查看原帖
【捞&同问】为什么本地跑对而交上去错?
1029122
Fish_redflying楼主2025/1/16 22:52

rt,帖详情

#include<bits/stdc++.h>
#define max_size 1145144
using namespace std;
struct Edge {
	int to,nxt,dis,self;
} edge[max_size];
struct node {
	int dis,pos;
	bool operator<(const node &other) const {
		return other.dis<dis;
	}
};
int head[max_size];
int cnt;
int n,m,s,u,v,w;
int Dis[max_size],vis[max_size];
int check[max_size],ans[max_size];
int pos,dis,child;
node tmp;

void add(int u,int v,int w) {
	cnt++;
	edge[cnt].nxt=head[u];
	edge[cnt].dis=w;
	edge[cnt].to=v;
	head[u]=cnt;
}

std::priority_queue<node> q;

void Dijkstra2() {
	q.push({0,1});
	while(!q.empty()) {
		tmp=q.top(),q.pop();
		pos=tmp.pos,dis=tmp.dis;
		if (vis[pos]) continue;
		vis[pos]=1;
		//cout<<pos<<endl;
		for(int i=head[pos];i!=0;i=edge[i].nxt) {
			child=edge[i].to;
            if (Dis[child]==Dis[pos]+edge[i].dis) {
                ans[child]=(ans[child]+ans[pos]);
            }
			if (Dis[child]>Dis[pos]+edge[i].dis) {
				Dis[child]=Dis[pos]+edge[i].dis;
                ans[child]=ans[pos];
				if (vis[child]==0) 
					q.push((node){Dis[child],child});
			}
            //cout<<Dis[child]<<" "<<child<<endl;
            
		}
	}	
}


signed main()
{
	scanf("%d%d",&n,&m);
	memset(Dis,0x3f,sizeof(Dis));
	for(int i=1;i<=m;i++) {
		scanf("%d%d%d",&u,&v,&w);
		add(u,v,w);
         //add(v,u,w);
	}
    Dis[1]=0;
    ans[1]=1;
    Dijkstra2();
    if (Dis[n]==0x3f3f3f3f) {
        cout<<"No answer"<<endl;
    } else {
        cout<<Dis[n]<<" "<<ans[n]<<endl;
    }
	return 0;
}




2025/1/16 22:52
加载中...