玄关
  • 板块P1608 路径统计
  • 楼主zlqwq
  • 当前回复3
  • 已保存回复3
  • 发布时间2025/7/28 11:20
  • 上次更新2025/7/28 15:14:17
查看原帖
玄关
1198194
zlqwq楼主2025/7/28 11:20

蒟蒻求救qwq。

#include<bits/stdc++.h>

#define int long long

#define write print

#define mkp make_pair

#define pii pair<int,int>

#define nl ln

using namespace std;

const int mod=998244353;
const int inf=1<<30;

int read(){
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-'){f=-f;}ch=getchar();}
	while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
	return x*f;
}

void print(int x){
	if(x<0){putchar('-');write(-x);return;}
	if(x<=9){putchar(x+'0');return;}
	else{write(x/10);putchar(x%10+'0');}
}

void println(int x){print(x);putchar('\n');}

void printsp(int x){print(x);putchar(' ');}

void jia(int &a,int b){a+=b;a+=mod;a%=mod;}

void jian(int &a,int b){a+=mod;a-=b;a%=mod;}

int n,m;
const int maxn=1005;
vector<pii>z[maxn];
int dis[maxn];
int dp[maxn];
int u[maxn],v[maxn],w[maxn];
int le[maxn][maxn];
void solve(){
	memset(le,inf,sizeof(le));
	n=read(),m=read();
	for(int i=1;i<=m;i++){
		u[i]=read(),v[i]=read(),w[i]=read();
		le[u[i]][v[i]]=min(le[u[i]][v[i]],w[i]);
	//	le[v[i]][u[i]]=min(le[v[i]][u[i]],w[i]);
	}
	for(int i=1;i<=m;i++){
		z[u[i]].push_back(mkp(v[i],le[u[i]][v[i]]));
	//	z[v[i]].push_back(mkp(u[i],le[v[i]][u[i]]));
	}
	memset(dp,0,sizeof(dp));
	memset(dis,inf,sizeof(dis));
	dis[1]=0;
	dp[1]=1;
	priority_queue<pii,vector<pii>,greater<pii> > q;
	q.push(mkp(0,1));
	while(q.size()){
		int x=q.top().second;
		if(dis[x]!=q.top().first) continue;
		q.pop();
		for(auto y:z[x]){
			int e=y.first,d=y.second;
			if(dis[e]>dis[x]+d){
				dis[e]=dis[x]+d;
				dp[e]=dp[x];
				q.push(mkp(dis[e],e));
				
			}
			else if(dis[e]==dis[x]+d){
				dp[e]+=dp[x];
			}
		}
	}
	if(dis[n]==inf){
		puts("No answer");
	}
	else{
		printsp(dis[n]);
		println(dp[n]);
	}
}

signed main(){int T=1;while(T--)solve();return 0;}

2025/7/28 11:20
加载中...