68pts求助
查看原帖
68pts求助
712647
rhx103513yyds楼主2024/7/23 16:18
#include<bits/stdc++.h>
//#pragma GCC optimize(3)
using namespace std;
#define int long long
int n,m;
int d[2005];
int ans[2005];
bool v[2005];
struct node{
	int x,y,w;
	friend bool operator>(node a,node b){
		return a.w>b.w;
	}
};
vector<node>a[2005];
priority_queue<node,vector<node>,greater<node> >q;
void dj(int x){
	for(int i=1;i<=n;i++)
		d[i]=(1LL<<40);
	d[x]=0;
	ans[x]=1;
	q.push({x,x,d[x]});
	v[x]=1;
	while(!q.empty()){
		node u=q.top();
		q.pop();
		v[u.y]=0;
		for(auto i:a[u.y]){
			if(d[i.y]>d[u.y]+i.w){
				d[i.y]=d[u.y]+i.w;
				if(!v[i.y])q.push({u.y,i.y,d[i.y]}),v[i.y]=1;
			}
			if(d[i.y]==d[u.y]+i.w){
				ans[i.y]+=ans[u.y];
			}
		}
	}
}
bool cmp(node a,node b){
	if(a.x==b.x)return a.y<b.y;
	return a.x<b.x;
}
vector<node> hand_write_unique(vector<node>a){
	vector<node>ans;
	ans.clear();
	int l=a.size();
	for(int i=0;i<l;i++){
		while(i<l&&a[i].x==a[i+1].x&&a[i].y==a[i+1].y)i++;
		ans.push_back(a[i]);
	}
	return ans;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x,y,w;
		cin>>x>>y>>w;
		a[x].push_back({x,y,w});
//		a[y].push_back({y,x,w});
	}
	for(int i=1;i<=n;i++){
		sort(a[i].begin(),a[i].end(),cmp);
		a[i]=hand_write_unique(a[i]);
	}
	dj(1);
	if(d[n]!=(1LL<<40))cout<<d[n]<<" "<<ans[n];
	else cout<<"No answer";
	return 0;
}

/*

*/

2024/7/23 16:18
加载中...