BFS能过这个题吗,本蒟蒻的BFS T了一个点qwq
查看原帖
BFS能过这个题吗,本蒟蒻的BFS T了一个点qwq
497835
canghan楼主2023/8/6 18:17
#include<bits/stdc++.h>
#include<time.h>
using namespace std;
const int INF=1e8;
int n,m,s,t;
struct node{
	int cnt,mic,sur;
};
unordered_map<int,int> ma,mb;
vector<pair<int,int> > a[20005];
int flag[30006];
queue<node>q;
int ans=0x7f7f7f7f;
int main(){
	scanf("%d%d%d%d",&n,&m,&s,&t);
	for(int i=1;i<=m;i++){
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		if(w<0)continue;
		a[u].push_back(make_pair(v,w));
		a[v].push_back(make_pair(u,w));
		ma[u]=INF;mb[u]=0;
		ma[v]=INF;mb[u]=0;
	}
	node k;k.cnt=t;k.mic=1;k.sur=0;
	q.push(k);
	while(!q.empty()){
		k=q.front();q.pop();
		flag[k.cnt]++;
		//if(flag[k.cnt]>1350000);
		if(k.cnt==s){
			ans=min(k.sur,ans);
			//sum++;
			continue;
		}
		if(ma[k.cnt]>k.sur&&mb[k.cnt]<k.mic){
			ma[k.cnt]=k.sur;
			mb[k.cnt]=k.mic;
		}
		else if(ma[k.cnt]<=k.sur&&mb[k.cnt]>=k.mic)continue;
		for(int i=0;i<a[k.cnt].size();i++){
			node tmp;
			tmp.cnt=a[k.cnt][i].first;
			tmp.mic=k.mic+1;
			tmp.sur=k.sur+(a[k.cnt][i].second/k.mic);
			if(tmp.sur>=ans)continue;
			q.push(tmp);
		}
	}
	printf("%d",ans);
	return 0;
}
2023/8/6 18:17
加载中...