只过了第一个点玄关求助!!!
查看原帖
只过了第一个点玄关求助!!!
1195678
wky2011楼主2024/10/3 11:38
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=3e5+5;
int n, m, s;
bool inQueue[N];
vector<pair<int,int> > edges[N];
inline ll read(){
    ll x=0,f=1;char ch=getchar();
    while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
    while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
    return x*f;
}
typedef pair<int, int> pii;
int dis[105],cnt[105];
priority_queue<pii> Q;
signed main(){
	cin>>n>>m;
	s=1;
	memset(dis,0x3f,sizeof(dis));
	for(int i=0,u,v, w; i< m; i++){
		cin>>u>>v;
		w=1;
		edges[u].emplace_back(v, w);
		edges[v].emplace_back(u, w);
	}
	memset(dis,0x3f,sizeof(dis));
	dis[s]= 0;
	Q.push({0,s});
	while(!Q.empty()){
		pii info = Q.top();
		Q.pop();
		int x= info.second;
		if(dis[x]!= info.first)
			continue;
		for(auto e:edges[x]){
			if(dis[e.first]<= dis[x]+ e.second)
				continue;
			dis[e.first]= dis[x]+ e.second;
			Q.push({dis[e.first],e.first});
		}
	}
	int ans=0,yi=0;
	for(int i=1;i<=n;i++){
		if(dis[i]<0x3f3f3f3f){
			if(ans<dis[i]){
				yi=i;
			//	cout<<yi<<' ';
				ans=dis[i];
				cnt[dis[i]]=1;
			}
			else{
			//	cout<<i<<' ';
				cnt[ans]++;
			}
		}
	}
	cout<<yi<<' '<<ans<<' '<<cnt[ans];
	return 0;
}
2024/10/3 11:38
加载中...