神奇RE
查看原帖
神奇RE
780277
czh1017楼主2023/7/12 09:56

测试的结果都是对的,只是RE,与机房里另一个同学讨论后仍然解决不了,估计是某个细节导致趋势,希望大佬帮忙

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
struct node{
	int to,l;
	node(int a,int b) : to(a),l(b){
	}
	bool operator < (node b) const{
		return l > b.l;
	}
};
int n,m;
vector <node> g[N];
int dist[N];
int dp[N];
void dijstra(){
	memset(dist,0x3f,sizeof(dist));
	priority_queue<node> q;
	dist[2]=0;
	q.push(node(2,dist[2]));
	while(!q.empty()){
		int t=q.top().to,d=q.top().l;
		q.pop();
		if(d>dist[t]) continue;
		for(int i=0;i<g[t].size();i++){
			if(dist[g[t][i].to]>dist[t]+g[t][i].l){
				dist[g[t][i].to]=dist[t]+g[t][i].l;
				q.push(node(g[t][i].to,dist[g[t][i].to]));
			}
		}
	}
}
int dfs(int u){	
	if(dp[u]) return dp[u];
	for(int i=0;i<g[u].size();i++){
		int v=g[u][i].to;
		if(dist[u]>dist[v]){
			dfs(v);
			dp[u]+=dp[v];
			
		}
	}
}
int ans[N];
int cnt=0;
int main(){
	
	while(scanf("%d",&n) && n!=0){
		memset(dist,0x3f,sizeof(dist));
		memset(dp,0,sizeof(dp));
		for(int i=1;i<=n;i++){
			g[i].clear();
		}
		scanf("%d",&m);
		for(int i=1;i<=m;i++){
			int u,v,w;
			scanf("%d%d%d",&u,&v,&w);
			g[u].push_back(node(v,w));
			g[v].push_back(node(u,w));
		}
		dijstra();
		dp[2]=1;
		dfs(1);
		cout<<dp[1]<<endl;
	}
	return 0;
}
2023/7/12 09:56
加载中...