답안 #232115

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
232115 2020-05-16T05:35:49 Z DodgeBallMan Pipes (CEOI15_pipes) C++14
90 / 100
1855 ms 22008 KB
#include<bits/stdc++.h>
using namespace std;
const int nmax=1e5+42;
 
vector< pair<int/*to*/,int/*id*/> > adj[nmax];
 
int in[nmax],low[nmax],t=0;
 
int n,m;
 
void dfs(int node,int par_edge)
{
    if(in[node])return;
 
    t++;
    in[node]=t;
    low[node]=t;
    //cout<<t<<" -> "<<node<<endl;
    for(auto k:adj[node])
        if(k.second!=par_edge)
        {
            if(in[k.first]==0)dfs(k.first,k.second);
 
            //cout<<"finished "<<node<<" "<<k.first<<" "<<low[k.first]<<endl;
 
            if(in[node]<in[k.first]&&in[node]<low[k.first])
            {
                printf("%i %i\n",node,k.first);
            }
            else low[node]=min(low[k.first],low[node]);
        }
}
 
int parent[2][nmax];
 
int main()
{
    scanf("%i%i",&n,&m);
 
    for(int i=1;i<=n;i++)
    {
        parent[0][i]=i;
        parent[1][i]=i;
    }
 
    int u,v;
    for(int i=1;i<=m;i++)
    {
        scanf("%i%i",&u,&v);
 
        bool keep=0;
        for(int j=0;j<2;j++)
        {
            int u_root=u,u_help=u,step_u=0;
            while(parent[j][u_root]!=u_root)
            {
                u_root=parent[j][u_root];
                step_u++;
            }
 
            int mem;
 
            while(u_help!=u_root)
            {
                mem=parent[j][u_help];
                parent[j][u_help]=u_root;
                u_help=mem;
            }
 
 
            int v_root=v,v_help=v,step_v=0;
            while(parent[j][v_root]!=v_root)
            {
                v_root=parent[j][v_root];
                step_v++;
            }
 
            while(v_help!=v_root)
            {
                mem=parent[j][v_help];
                parent[j][v_help]=v_root;
                v_help=mem;
            }
 
            //cout<<j<<" "<<u_root<<" "<<v_root<<endl;
 
            //for(int i=1;i<=n;i++)cout<<parent[j][i]<<" ";cout<<endl;
 
            if(u_root==v_root)continue;
 
            if(step_u<step_v)swap(u_root,v_root);
 
            parent[j][v_root]=u_root;
            keep=1;
            break;
        }
 
        if(keep==0)continue;
 
        adj[u].push_back({v,i});
        adj[v].push_back({u,i});
 
        //cout<<"added "<<u<<" "<<v<<endl;
    }
 
    //cout<<" --- "<<endl;
    for(int i=1;i<=n;i++)
        if(in[i]==0)dfs(i,0);
 
    return 0;
}

Compilation message

pipes.cpp: In function 'int main()':
pipes.cpp:38:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%i%i",&n,&m);
     ~~~~~^~~~~~~~~~~~~~
pipes.cpp:49:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%i%i",&u,&v);
         ~~~~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 2688 KB Output is correct
2 Correct 6 ms 2688 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 3328 KB Output is correct
2 Correct 10 ms 3200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 158 ms 3960 KB Output is correct
2 Correct 154 ms 3712 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 274 ms 5352 KB Output is correct
2 Correct 316 ms 4728 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 444 ms 6776 KB Output is correct
2 Correct 383 ms 5716 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 560 ms 12164 KB Output is correct
2 Correct 512 ms 9208 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 902 ms 14056 KB Output is correct
2 Runtime error 903 ms 22008 KB Memory limit exceeded (if you are sure your verdict is not MLE, please contact us)
# 결과 실행 시간 메모리 Grader output
1 Correct 1199 ms 15748 KB Output is correct
2 Correct 1133 ms 11500 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1463 ms 15836 KB Output is correct
2 Correct 1437 ms 12104 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1855 ms 15352 KB Output is correct
2 Correct 1788 ms 12152 KB Output is correct