Submission #153168

# Submission time Handle Problem Language Result Execution time Memory
153168 2019-09-12T16:21:23 Z Mercenary Pipes (CEOI15_pipes) C++14
20 / 100
4151 ms 29120 KB
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/trie_policy.hpp>

#define pb push_back
#define mp make_pair
#define taskname "A"

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef long double ld;
typedef pair<int,int> ii;
typedef tree <int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;

const int maxn = 1e5 + 5;
const int logn = log2(maxn) + 1;
int n , m , nEdge = 0;

int P[maxn][logn];
int lab[maxn] , h[maxn] , dp[maxn];
vector<int> adj[maxn];

int FindLab(int u){
    return lab[u] < 0 ? u : lab[u] = FindLab(lab[u]);
}

void BuildLCA(int u , int par){
    P[u][0] = par;
    for(int i = 1 ; i < logn && P[u][i - 1] ; ++i){
        P[u][i] = P[P[u][i - 1]][i - 1];
    }
}

void dfs(int u , int par){
    for(int c : adj[u]){
        if(par != c){
            h[c] = h[u] + 1;
            BuildLCA(c , u);
            dfs(c , u);
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    if(fopen(taskname".INP","r")){
		freopen(taskname".INP", "r",stdin);
		freopen(taskname".OUT", "w",stdout);
    }
    fill_n(lab,maxn,-1);
    cin >> n >> m;
    for(int u , v , s , t , i = 1 ; i <= m ; ++i){
        cin >> u >> v;
        s = FindLab(u);
        t = FindLab(v);
        if(s != t){
            if(lab[s] > lab[t])swap(s , t) , swap(u , v);
            lab[s] += lab[t];
            lab[t] = s;
            adj[u].pb(v);
            adj[v].pb(u);
        }
    }
    for(int i = 1 ; i <= n ; ++i){
        if(h[i] == 0){
            h[i] = 1;
            dfs(i , 0);
        }
    }
    fill_n(lab,maxn,-1);
    fill_n(h,maxn,0);
    rewind(stdin);
    cin >> n >> m;
    for(int u , v , s , t , i = 1 ; i <= m ; ++i){
        cin >> u >> v;
        s = FindLab(u);
        t = FindLab(v);
        if(s != t){
            if(lab[s] > lab[t])swap(s , t) , swap(u , v);
            lab[s] += lab[t];
            lab[t] = s;
        }else{
            auto lca = [&](int &u , int &v){
                if(h[u] < h[v])swap(u , v);
                for(int i = 0 ; i < logn && h[u] != h[v] ; ++i){
                    if((h[u] - h[v]) & (1 << i))u = P[u][i];
                }
                if(u == v)return u;
                for(int i = logn - 1 ; i >= 0 ; --i){
                    if(P[u][i] != P[v][i])u = P[u][i] , v = P[v][i];
                }
                return P[u][0];
            };
            dp[u]++;dp[v]++;
            dp[lca(u,v)] -= 2;
        }
    }
    for(int i = 1 ; i <= n ; ++i){
        if(h[i] == 0){
            h[i] = 1;
            function<void(int&,int&)> dfs = [&](int& u , int &par){
                for(int v : adj[u]){
                    if(v != par){
                        h[v] = h[u] + 1;
                        dfs(v , u);
                        dp[u] += dp[v];
                        if(dp[v] == 0)cout << u << " " << v << '\n';
                    }
                }
            };
            dfs(i , i);
        }
    }
}

Compilation message

pipes.cpp: In function 'int main()':
pipes.cpp:51:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   freopen(taskname".INP", "r",stdin);
   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
pipes.cpp:52:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   freopen(taskname".OUT", "w",stdout);
   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 5 ms 3448 KB Output is correct
2 Incorrect 5 ms 3448 KB Wrong number of edges
# Verdict Execution time Memory Grader output
1 Correct 12 ms 3964 KB Output is correct
2 Incorrect 13 ms 4088 KB Wrong number of edges
# Verdict Execution time Memory Grader output
1 Correct 307 ms 4088 KB Output is correct
2 Incorrect 306 ms 4112 KB Wrong number of edges
# Verdict Execution time Memory Grader output
1 Correct 530 ms 4836 KB Output is correct
2 Incorrect 626 ms 4776 KB Wrong number of edges
# Verdict Execution time Memory Grader output
1 Correct 891 ms 6660 KB Output is correct
2 Correct 744 ms 6728 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1228 ms 10952 KB Output is correct
2 Incorrect 1134 ms 10636 KB Wrong number of edges
# Verdict Execution time Memory Grader output
1 Correct 2001 ms 11824 KB Output is correct
2 Correct 1778 ms 11672 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2721 ms 14352 KB Output is correct
2 Incorrect 2734 ms 13680 KB Wrong number of edges
# Verdict Execution time Memory Grader output
1 Correct 3509 ms 14524 KB Output is correct
2 Incorrect 3375 ms 14792 KB Wrong number of edges
# Verdict Execution time Memory Grader output
1 Correct 4151 ms 14292 KB Output is correct
2 Runtime error 3728 ms 29120 KB Memory limit exceeded (if you are sure your verdict is not MLE, please contact us)