求助,WA 100pts
查看原帖
求助,WA 100pts
919528
Crush_Star楼主2024/8/1 12:50

WA on Subtask #1

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=300005;
vector<int>g[N];
vector<int>ne[N];
int cnt,idx,n,m;
int dfn[N],low[N],scc[N],dis[N],jzh[N],u[N],v[N];
bool vis[N];
stack<int>t;
void dfs(int x){
	dfn[x]=++cnt;
	low[x]=dfn[x];
	t.push(x);vis[x]=1;
	for(auto v:g[x]){
		if(!dfn[v])	dfs(v),low[x]=min(low[x],low[v]);
		else if(vis[v])	low[x]=min(low[x],dfn[v]);
	}
	if(low[x]==dfn[x]){
		++idx;
		while(1){
			auto ts=t.top();t.pop();
			vis[ts]=0;
			scc[ts]=idx;
			jzh[idx]++;
			if(ts==x)break;
		}
	}
}
void spfa(){
	queue<int>q;
	q.push(scc[1]);
	vis[scc[1]]=1;
	while(q.size()){
		auto u=q.front();q.pop();
//		cout<<u<<"\n";
		vis[u]=0;
		for(auto v:ne[u]){
			if(dis[v]<dis[u]+jzh[v]){
				dis[v]=dis[u]+jzh[v];
				if(!vis[v])q.push(v),vis[v]=1;
			}
		}
	}
	cout<<dis[scc[1]+idx];
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	while(m--){
		int u,v;
		cin>>u>>v;
		g[u].push_back(v);
	}
	for(int i=1;i<=n;i++)	if(!dfn[i])	dfs(i);
	for(int i=1;i<=idx;i++)	jzh[i+idx]=jzh[i];
	for(int i=1;i<=n;i++){
		for(auto v:g[i]){
			if(scc[i]!=scc[v]){
				ne[scc[i]].push_back(scc[v]);
				ne[scc[v]].push_back(scc[i]+idx);
				ne[scc[i]+idx].push_back(scc[v]+idx);
			}
		}
	}
	spfa();
	return 0;
}
2024/8/1 12:50
加载中...