제출 #244662

#제출 시각아이디문제언어결과실행 시간메모리
244662tqbfjotldPipes (CEOI15_pipes)C++14
100 / 100
1887 ms8768 KiB
#include <vector>
#include <cstdio>
using namespace std;
#define MAXN 100005
bool isBridge[MAXN];
int p[MAXN];
int sz[MAXN];
int depth[MAXN];
vector<int> adjl[MAXN];
int p2[MAXN];
int rt[MAXN];

void dfs(int node, int parent){
    for (int x : adjl[node]){
        if (x==parent) continue;
        depth[x] = depth[node]+1;
        rt[x] = rt[node];
        dfs(x,node);
        if(p2[x]!=node){
            isBridge[x] = isBridge[node];
            p2[x] = node;
        }
        p[x] = node;
    }
}



int func(int a, int b){
  //  printf("a: %d, depth: %d\n",a,depth[a]);
   // printf("b: %d, depth: %d\n",b,depth[b]);
    if (a==b) return a;
    if (depth[b]<depth[a]) swap(a,b);
    isBridge[b] = false;
    int t = func(a,p[b]);
    p[b] = t;
}

int n,e;

int main(){
    //printf("%d\n",sizeof(isBridge)+sizeof(p)+sizeof(sz)+sizeof(depth)+sizeof(adjl)+sizeof(p2)+sizeof(rt));
    scanf("%d%d",&n,&e);
    for (int x = 0; x<=n; x++){
        isBridge[x] = false;
        p[x] = x;
        sz[x] = 1;
        depth[x] = 0;
        rt[x] = x;
    }
    for (int x = 0; x<e; x++){
        int a,b;
        scanf("%d%d",&a,&b);
        if (rt[a]==rt[b]){
            func(a,b);
        }
        else{
            if (sz[rt[b]]>sz[rt[a]]) swap(a,b);
            sz[rt[a]] += sz[rt[b]];
            adjl[b].push_back(a);
            adjl[a].push_back(b);
            depth[b] = depth[a]+1;
            p2[b] = a;
            p[b] = a;
           // printf("p[%d] set to %d\n",b,a);
            rt[b] = rt[a];
            dfs(b,a);
            isBridge[b] = true;
        }
        /*for (int x = 1; x<=n; x++){
            printf("p[%d] = %d, depth %d, isbridge %d, p: %d\n",x,p2[x],depth[x],isBridge[x], p[x]);
        }*/
    }
    for (int x = 1; x<=n; x++){
        if (isBridge[x]){
            printf("%d %d\n",x,p2[x]);
        }
    }
}

컴파일 시 표준 에러 (stderr) 메시지

pipes.cpp: In function 'int func(int, int)':
pipes.cpp:37:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
pipes.cpp: In function 'int main()':
pipes.cpp:43:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d",&n,&e);
     ~~~~~^~~~~~~~~~~~~~
pipes.cpp:53:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d",&a,&b);
         ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...