【悬关+玄学求助】本地DEV缩点一直TLE代码什么都不输出(包括debug)
查看原帖
【悬关+玄学求助】本地DEV缩点一直TLE代码什么都不输出(包括debug)
794146
SCma楼主2024/10/19 21:55
#include<bits/stdc++.h>
#define endl '\n'
#define MIN(a,b,c) min(min(a,b),c)
#define MAX(a,b,c) max(max(a,b),c)
#define ri register int
#define int long long
#define fixedset(a) fixed << setprecision(a)
#define ls(x) x<<1
#define rs(x) x<<1|1
#define MAXN 9.2211e18
#define inf 2114514
#define mf 5011
#define sf 1011
using namespace std;
mt19937_64 randint{std::chrono::steady_clock::now().time_since_epoch().count()};
int n,m,x,y,ans,out[inf];
vector<int> orgedge[inf],newedge[inf];
int sc,head,index_,dfncnt,dfn[inf],low[inf],s[inf],scc[inf];
bool in_stack[inf],Hash[inf];
queue<int> q;
void TarjanSCC(int u){
	dfn[u]=low[u]=++dfncnt,s[++head]=u,in_stack[u]=true;
	for(auto v:orgedge[u]){ 
		if(!dfn[v]){
			TarjanSCC(v);
			low[u]=min(low[u],low[v]);
		}else if(in_stack[v]) low[u]=min(low[u],dfn[v]);
	}
	
	if(dfn[u]==low[u]){
		sc++;
		while(s[head]!=u){
			scc[s[head]]=sc;
			in_stack[s[head--]]=false;
		}
		scc[s[head]]=sc;
		in_stack[s[head]--]=false;
	}
	return;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	//freopen(".in","r",stdin);
   	//freopen(".out","w",stdout);
	
      //cout << "AA" << endl; //甚至连这个都不输出
	cin >> n >> m;
	for(ri i=1;i<=m;i++){
		cin >> x >> y;
		orgedge[x].push_back(y);
	}
	
	for(ri i=1;i<=n;i++) if(!dfn[i]){
		TarjanSCC(i);
	}
	for(ri u=1;u<=n;u++) for(auto v:newedge[u]){
		if(!Hash[(int)(scc[u]*pow(sc,2)+scc[v])]){
			Hash[(int)(scc[u]*pow(sc,2)+scc[v])]=true,index_++;
			newedge[scc[u]].push_back(scc[v]);
			out[scc[u]]++;
		}
	}
	
	for(ri i=1;i<=sc;i++) if(!out[i]){
		for(ri j=1;j<=n;i++) if(scc[j]==i) ans++; 
	}
	cout << ans << endl;
	return 0;
}

求解答

2024/10/19 21:55
加载中...