抄题解失败求条
查看原帖
抄题解失败求条
1058570
tzhengqing楼主2025/7/20 15:54

自己交五发没过,愤怒抄题解,结果题解也没过。(?)

现请求撤下题解,并求条。悬关。

这是题解:题解 提交记录

这是我的代码:60pts提交记录

#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
int n,m,dfn[N],low[N],vis[N],cnt=0,scc[N],siz[N],in[N],dp[N],inf=36501,sc=0;
vector<int>e[N],e2[N],ans[N];
stack<int>st;
void tarjan(int f,int x)
	{
	dfn[x]=low[x]=++cnt;vis[x]=1;st.push(x);
	for(int i=0;i<e[x].size();i++)
		{
		int d=e[x][i];
		if(d==f)continue;
		if(!dfn[d])
			{
			tarjan(x,d);
			low[x]=min(low[x],low[d]);
			}
		else if(vis[d])low[x]=min(low[x],dfn[d]);
		}
	if(dfn[x]==low[x])
		{
		sc++;scc[x]=x;vis[x]=0;ans[x].push_back(x);
		while(st.top()!=x)
			{
			int d=st.top();
			scc[d]=x;
			siz[x]++;
			vis[d]=0;
			ans[x].push_back(d);
			st.pop();
			}
		st.pop();siz[x]++;
		if(siz[x]==1)
			{
			for(int i=0;i<e[x].size();i++)
				{
				if(e[x][i]==x)siz[x]++;
				}
			}
		}
	}
void topo()
	{
	queue<int>q;q.push(scc[n+1]);
	while(!q.empty())
		{
		int x=q.front();q.pop();
		for(int i=0;i<e2[x].size();i++)
			{
			int d=e2[x][i];
			dp[d]=min(dp[d]+dp[x]+(siz[d]>1?inf:0),inf);
			if(--in[d]==0)q.push(d);
			//cout<<d<<' '<<dp[d]<<' '<<x<<' '<<dp[x]<<'\n';
			}
		}
	}
int main()
	{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
		{
		int x,y;cin>>x>>y;
		e[x].push_back(y);
		}
	for(int i=1;i<=n+1;i++)if(!dfn[i])tarjan(0,i);
	for(int i=1;i<=n+1;i++)
		{
		int x=scc[i];
		for(int j=0;j<e[i].size();j++)
			{
			int y=scc[e[i][j]];
			if(x!=y)e2[y].push_back(x),in[x]++;
			}
		}
	for(int i=1;i<=n+1;i++)
		{
		int x=scc[i];
		for(int j=0;j<e[i].size();j++)
			{
			int y=scc[e[i][j]];
			if(x!=y&&in[y]==0&&y!=scc[n+1])in[x]--;
			}
		}
	dp[scc[n+1]]=(siz[scc[n+1]]>1?inf:1);
	topo();
	int maxi=0;
	for(int i=1;i<=n;i++)maxi=max(maxi,dp[i]);
	if(maxi<inf)cout<<maxi<<'\n';
	else cout<<"zawsze\n";
	int ans1=0;
	for(int i=1;i<=n+1;i++)
		{
		if(dp[i]==maxi)
			{
			for(int j=0;j<ans[i].size();j++)if(ans[i][j]!=n+1)vis[++ans1]=ans[i][j];
			}
		}
	cout<<ans1<<'\n';
	sort(vis+1,vis+ans1+1);
	for(int i=1;i<=ans1;i++)cout<<vis[i]<<' ';
	return 0;
	}
2025/7/20 15:54
加载中...