求大佬略微算下复杂度
查看原帖
求大佬略微算下复杂度
784813
SakurajiamaMai楼主2023/9/13 18:22

没想到能这么暴力就过去,我害怕时间复杂度不够,因为看到了10000条边就没想着一遍一遍的dfs,有大佬能仔细说下这种遍历的复杂度如何算的呢?

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10,mod=1e9+7;
string s;
int n,t,a[N],f[N],res,num,ans,m,k;
int e[N],ne[N],h[N],idx;
bool vis[N],st[N];
void add(int a,int b)
{
    e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs(int u)
{
    for(int i=h[u];~i;i=ne[i])
    {
        int j=e[i];
        if(vis[j]) continue;
        vis[j]=true;
        dfs(j);
    }
}
signed main()
{
    std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin>>k>>n>>m;
    memset(h,-1,sizeof h);
    for(int i=1;i<=k;i++) cin>>a[i],st[a[i]]=true;
    for(int i=1;i<=m;i++){
        int u,v;
        cin>>u>>v;
        add(v,u);
    }
    for(int i=1;i<=n;i++){
        int num=0;
        memset(vis,false,sizeof vis);
        dfs(i);
        bool f=false;
        vis[i]=true;
        for(int j=1;j<=n;j++)
            if(st[j]&&!vis[j]) f=true;
        if(!f) res++;
    }
    cout<<res;
    return 0;
}
2023/9/13 18:22
加载中...