80ptsWA on #6 #8求助
查看原帖
80ptsWA on #6 #8求助
1074084
asd890123楼主2025/7/1 07:38
#include<bits/stdc++.h>
int dfn[1005],low[1005],dfc,i,SCC[1005];
bool inStack[1005],vis[1005][1005];
std::stack<int> st;
std::vector<std::vector<int> > scc;
std::vector<int> g[1005],DAG[1005];
void tarjan(int u){
    dfn[u] = low[u] = ++dfc;
    inStack[u] = 1;st.push(u);
    for (int v : g[u]){
        if (!dfn[v]){
            tarjan(v);
            low[u] = std::min(low[u],low[v]);
        }
        else if (inStack[v]) low[u] = std::min(low[u],dfn[v]);
    }
    if (low[u] == dfn[u]){
        int x;scc.push_back({});
        do{
            x = st.top();st.pop();
            inStack[x] = 0;
            SCC[x] = scc.size();
            scc.back().push_back(x);
        }while (x != u);
    }
}
void dfs(int u){
    for (int v : DAG[u])
        if (!vis[i][v]){
            vis[i][v] = 1;dfs(v);
        }
}
int main(){
    std::cin.tie(0)->sync_with_stdio(0);
    int T;
    for (std::cin >> T;T--;){
        int n,m;std::cin >> n >> m;
        while (!st.empty()) st.pop();
        dfc = 0;scc.clear();
        memset(dfn,0,sizeof(dfn));
        memset(low,0,sizeof(low));
        memset(SCC,0,sizeof(SCC));
        memset(inStack,0,sizeof(inStack));
        for (int i = 1;i <= n;i++) g[i].clear();
        for (int i = 1;i <= m;i++){
            int u,v;std::cin >> u >> v;
            g[u].push_back(v);
        }
        for (int i = 1;i <= n;i++)
            if (!dfn[i]) tarjan(i);
        for (int i = 1;i <= scc.size();i++) DAG[i].clear();
        for (int u = 1;u <= n;u++)
            for (int v : g[u])
                if (SCC[u] != SCC[v] && std::find(DAG[SCC[u]].begin(),DAG[SCC[u]].end(),SCC[v]) == DAG[SCC[u]].end())
                    DAG[SCC[u]].push_back(SCC[v]);
        for (i = 1;i <= scc.size();i++){
            vis[i][i] = 1;dfs(i);
        }
        for (int i = 1;i <= scc.size();i++)
            for (int j = 1;j <= scc.size();j++)
                if (!vis[i][j] && !vis[j][i]) goto nxt;
        std::cout << "Yes\n";continue;
        nxt:std::cout << "No\n";
    }
    return 0;
}
2025/7/1 07:38
加载中...