mle+wa55pts求助
查看原帖
mle+wa55pts求助
984450
zhoujinhong楼主2024/7/23 15:44
#include<bits/stdc++.h>
using namespace std;
const int N=500001,M=1000001,T=100001;
int n,m,a[M],b[M],t[M],dfn[N],low[N],tot,stk[N],cnt,e_dcc[N],sum,mn,root1,root2,dp[N],k[N];
bool flag,vis[T];
struct node{
	int to,w;
};
vector<node>v[N];
vector<int>ve[N];
void tarjan(int now,int fa){
	dfn[now]=low[now]=++tot;
	stk[++cnt]=now;
	for(int i=0;i<ve[now].size();i++){
		int tmp=ve[now][i];
		if(!dfn[tmp]){
			tarjan(tmp,now);
			low[now]=min(low[now],low[tmp]);
			if(low[tmp]>dfn[now]){
				++sum;
				while(stk[cnt]!=tmp){
					e_dcc[stk[cnt]]=sum;
					--cnt;
				}
				e_dcc[stk[cnt]]=sum;
				--cnt;
			}
		}
		else if(tmp!=fa){
			low[now]=min(low[now],dfn[tmp]);
		}
	}
}
void dfs1(int now,int fa){
	int mnn=INT_MAX,tmp3=-1;
	for(int i=0;i<v[now].size();i++){
		int tmp1=v[now][i].to,tmp2=v[now][i].w;
		if(tmp1!=fa){
			dfs1(tmp1,now);
			if(min(dp[tmp1],tmp2)<mnn){
				mnn=min(dp[tmp1],tmp2);
				tmp3=tmp1;
			}
		}
	}
	dp[now]=mnn;
	k[now]=tmp3;
}
void dfs2(int now,int fa){
	if(k[now]==-1) return;
	for(int i=0;i<v[now].size();i++){
		int tmp1=v[now][i].to,tmp2=v[now][i].w;
		if(tmp1==k[now]){
			vis[tmp2]=1;
			dfs2(tmp1,now);
			return;
		}
	} 
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	memset(dp,0x3f,sizeof(dp));
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>a[i]>>b[i]>>t[i];
		ve[a[i]].push_back(b[i]);
	}
	for(int i=1;i<=n;i++){
		if(!dfn[i]){
			tarjan(i,0);
			if(cnt!=0){
				++sum;
				while(cnt){
					e_dcc[stk[cnt]]=sum;
					--cnt;
				}
			}
		}
	}
	mn=INT_MAX;
	for(int i=1;i<=m;i++){
		if(e_dcc[a[i]]!=e_dcc[b[i]]){
			v[e_dcc[a[i]]].push_back({e_dcc[b[i]],t[i]});
			v[e_dcc[b[i]]].push_back({e_dcc[a[i]],t[i]});
			if(t[i]<mn){
				mn=t[i];
				root1=e_dcc[a[i]];
				root2=e_dcc[b[i]];
			}
		}
	}
	dfs1(root1,root2);
	dfs1(root2,root1);
	sort(t+1,t+m+1);
	dfs2(root1,root2);
	dfs2(root2,root1);
	vis[mn]=1;
	for(int i=1;i<=m;i++){
		if(!vis[t[i]]){
			cout<<t[i]<<" ";
			flag=true;
			break;
		}
	}
	if(flag==false) cout<<-1;
	return 0;
}
2024/7/23 15:44
加载中...