제출 #1215557

#제출 시각아이디문제언어결과실행 시간메모리
1215557KindaGoodGamesNewspapers (CEOI21_newspapers)C++20
0 / 100
0 ms328 KiB
#include<bits/stdc++.h>

#define ll long long
#define pii pair<int,int>
#define tiii tuple<int,int,int>

using namespace std;

vector<int> num, low;  
vector<vector<int>> adj;

vector<bool> isArt;

int counter = 0;

void Tarjan(int v, int p){
    num[v] = low[v] = counter++; 
    
    for(auto u : adj[v]){
        if(u == p) continue;
        if(num[u] == -1){
            Tarjan(u,v); 
            low[v] = min(low[v], low[u]);

            if(num[v] <= low[u] && v != 0){
                isArt[v] = true;
            }

        }else{
            low[v] = min(low[v], num[u]);    
        }
    }
}

int mxSz = 1;

void DFS(int v, int p, int sz, vector<bool>& vis){
    if(vis[v]) return;
    mxSz = max(mxSz, sz);
    vis[v] = true;

    for(auto u : adj[v]){
        int nsz = sz+1;
        if(low[v] != low[u]){
            nsz = 1;
        }
        DFS(u,v,nsz,vis);
    }
}

int main(){
    int n, m;
    cin >> n >> m;
    adj.resize(n);
    low = num = vector<int>(n);
    isArt.resize(n);
    for(int i = 0; i < m; i++){
        int a,b;
        cin >> a >> b;
        a--;b--;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }

    Tarjan(0,0);

    vector<bool> vis(n);
    DFS(0,0,1,vis);

    if(mxSz <= 2){
        cout << "YES\n";
        cout << "1 1\n";
    }else{
        cout << "NO\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...