답안 #246420

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
246420 2020-07-09T08:27:03 Z dantoh000 Pipes (CEOI15_pipes) C++14
컴파일 오류
0 ms 0 KB
#include <utility>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <set>
using namespace std;
typedef pair<int,int> ii;
int n,m;
int d[100005], pa[100005], sz[100005];
vector<int> G[100005];
set<ii> bad;
struct ufds{
    int p[100005];
    ufds(){
        for (int i = 0; i <= 100000; i++) p[i] = i;
    }
    int find(int x){
        return p[x] == x ? x : p[x] = find(p[x]);
    }
    void un(int x, int y){
        p[x] = y;
    }
} u1 = ufds(), u2 = ufds();
void dfs(int u, int p){
    ///join at side bad
    u2.p[u] = u;
    pa[u] = p;
	for (auto v : G[u]){
		if (v == p) continue;
		else{
            d[v] = d[u]+1;
			pa[v] = u;
            dfs(v,u);
		}
	}
}
 
int main(){
    scanf("%d%d",&n,&m);
    for (int i = 0; i < m; i++){
        int u,v;
        scanf("%d%d",&u,&v);
        int pu = u1.find(u), pv = u1.find(v);
        //printf("%d -> %d, %d -> %d\n",u,pu,v,pv);
        if (pu == pv){
            //printf("update path %d %d\n",u,v);
            ///make all edges along this path bad
            ///all edges along path are only changed once, amortised O(N)
            u = u2.find(u), v = u2.find(v);
            while (u != v){
                if (d[u] < d[v]) swap(u,v);
                bad.insert({min(u,pa[u]),max(u,pa[u])});
                //printf("bad %d %d\n",u,pa[u]);
                u2.un(u, pa[u])
                u = pa[u];
                u = u2.find(u);
            }
        }
        else{
 
            //printf("join %d %d\n",u,v);
            ///join the two components
            if (sz[pu] < sz[pv]){
                swap(pu,pv);
                swap(u,v);
            }
            ///join small v to big u
            u1.un(pv,pu);
            sz[pu] += sz[pv];
            ///add edge
            G[u].push_back(v);
            G[v].push_back(u);
            ///restart dfs
            d[v] = d[u]+1;
            dfs(v,u);
 
        }
    }
    for (int u = 1; u <= n ;u++){
        for (auto v : G[u]){
            if (v > u && bad.find({u,v}) == bad.end()){
                printf("%d %d\n",u,v);
            }
        }
    }
 
 
}

Compilation message

pipes.cpp:54:2: error: stray '\302' in program
                 u2.un(u, pa[u])
  ^
pipes.cpp:54:3: error: stray '\240' in program
                 u2.un(u, pa[u])
   ^
pipes.cpp:54:5: error: stray '\302' in program
                 u2.un(u, pa[u])
     ^
pipes.cpp:54:6: error: stray '\240' in program
                 u2.un(u, pa[u])
      ^
pipes.cpp:54:8: error: stray '\302' in program
                 u2.un(u, pa[u])
        ^
pipes.cpp:54:9: error: stray '\240' in program
                 u2.un(u, pa[u])
         ^
pipes.cpp:54:11: error: stray '\302' in program
                 u2.un(u, pa[u])
           ^
pipes.cpp:54:12: error: stray '\240' in program
                 u2.un(u, pa[u])
            ^
pipes.cpp:54:14: error: stray '\302' in program
                 u2.un(u, pa[u])
              ^
pipes.cpp:54:15: error: stray '\240' in program
                 u2.un(u, pa[u])
               ^
pipes.cpp:54:17: error: stray '\302' in program
                 u2.un(u, pa[u])
                 ^
pipes.cpp:54:18: error: stray '\240' in program
                 u2.un(u, pa[u])
                  ^
pipes.cpp:54:20: error: stray '\302' in program
                 u2.un(u, pa[u])
                    ^
pipes.cpp:54:21: error: stray '\240' in program
                 u2.un(u, pa[u])
                     ^
pipes.cpp:54:23: error: stray '\302' in program
                 u2.un(u, pa[u])
                       ^
pipes.cpp:54:24: error: stray '\240' in program
                 u2.un(u, pa[u])
                        ^
pipes.cpp:55:2: error: stray '\302' in program
                 u = pa[u];
  ^
pipes.cpp:55:3: error: stray '\240' in program
                 u = pa[u];
   ^
pipes.cpp:55:5: error: stray '\302' in program
                 u = pa[u];
     ^
pipes.cpp:55:6: error: stray '\240' in program
                 u = pa[u];
      ^
pipes.cpp:55:8: error: stray '\302' in program
                 u = pa[u];
        ^
pipes.cpp:55:9: error: stray '\240' in program
                 u = pa[u];
         ^
pipes.cpp:55:11: error: stray '\302' in program
                 u = pa[u];
           ^
pipes.cpp:55:12: error: stray '\240' in program
                 u = pa[u];
            ^
pipes.cpp:55:14: error: stray '\302' in program
                 u = pa[u];
              ^
pipes.cpp:55:15: error: stray '\240' in program
                 u = pa[u];
               ^
pipes.cpp:55:17: error: stray '\302' in program
                 u = pa[u];
                 ^
pipes.cpp:55:18: error: stray '\240' in program
                 u = pa[u];
                  ^
pipes.cpp:55:20: error: stray '\302' in program
                 u = pa[u];
                    ^
pipes.cpp:55:21: error: stray '\240' in program
                 u = pa[u];
                     ^
pipes.cpp:55:23: error: stray '\302' in program
                 u = pa[u];
                       ^
pipes.cpp:55:24: error: stray '\240' in program
                 u = pa[u];
                        ^
pipes.cpp: In function 'int main()':
pipes.cpp:55:25: error: expected ';' before 'u'
                 u = pa[u];
                         ^
pipes.cpp:39:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d",&n,&m);
     ~~~~~^~~~~~~~~~~~~~
pipes.cpp:42:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d",&u,&v);
         ~~~~~^~~~~~~~~~~~~~