#2 wa test case 20,两关
  • 板块CF1927F Microcycle
  • 楼主AKPC
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/23 17:27
  • 上次更新2024/3/23 19:47:17
查看原帖
#2 wa test case 20,两关
540363
AKPC楼主2024/3/23 17:27
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define mpr make_pair
#define fr first
#define sc second
inline int read(){
	int res=0,f=1;char c=getchar();
	while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
	while (c>='0'&&c<='9') {res=res*10+(c-'0');c=getchar();}
	return res*f;
}
const int N=2e5+5;
int T,n,m,dep[N],f[N];
vector<int>te[N];
void dfs(int u,int fa){
	dep[u]=dep[fa]+1;
	f[u]=fa;
	for (auto v:te[u]){
		if (v==fa) continue;
		dfs(v,u);
	}
}
int fa[N];
struct node{
	int x,y,w;
}be[N];
bool cmp(node o,node p){
    return o.w>p.w;
}
int findx(int x){
    if (x==fa[x]) return x;
    fa[x]=findx(fa[x]);
    return fa[x];
}
bitset<N>tmp;
void init(){
    sort(be+1,be+m+1,cmp);
    for (int i=1;i<=n;i++) fa[i]=i;
    for (int i=1;i<=m;i++){
        if (findx(be[i].x)!=findx(be[i].y)){
        	te[be[i].x].push_back(be[i].y);
        	te[be[i].y].push_back(be[i].x);
        	tmp[i]=1;
            fa[findx(be[i].x)]=be[i].y;
        }
    }
}
stack<int>qwq;
void solve(){
	n=read(),m=read();
	for (int i=1;i<=m;i++){
		int u=read(),v=read(),w=read();
		be[i]={u,v,w};
	}
	init();
	for (int i=1;i<=n;i++){
		if (!dep[i]) dfs(i,0);
	}
//	for (int i=1;i<=n;i++){
//		cout<<"sb: "<<i<<' '<<f[i]<<'\n';
//		for (auto j:te[i]){
//			cout<<i<<' '<<j<<'\n';
//		}
//	}
	int tip=m;
	while (tmp[tip]&&m>=1) m--;
	int u=be[tip].x,v=be[tip].y,_u=u,_v=v,_lca;
	while (_u!=_v){
//		cout<<_u<<' '<<_v<<'\n';
		while (dep[_u]>=dep[_v]&&_u!=_v) _u=f[_u];
		while (dep[_v]>=dep[_u]&&_u!=_v) _v=f[_v];
	}
	_lca=_u;
//	cout<<"egon "<<u<<' '<<v<<' '<<_lca<<'\n';
//	cout<<"Ans Begin\n";
	cout<<be[tip].w<<' '<<dep[u]+dep[v]-dep[_lca]*2+1<<'\n';
	while (u!=_lca) cout<<u<<' ',u=f[u];
	cout<<_lca<<' ';
	while (v!=_lca) qwq.push(v),v=f[v];
	while (!qwq.empty()) cout<<qwq.top()<<' ',qwq.pop();
	cout<<'\n';
//	cout<<"Ans End\n";
	for (int i=1;i<=n;i++){
		te[i].clear();
		dep[i]=0;
	}
	for (int i=1;i<=m;i++) be[i]={0,0,0},tmp[i]=0;
}
signed main(){
	T=read();
	while (T--) solve();
	return 0;
}
2024/3/23 17:27
加载中...