답안 #499343

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
499343 2021-12-28T04:00:46 Z kaxzert One-Way Streets (CEOI17_oneway) C++17
100 / 100
90 ms 16444 KB
/**
      00  00      11      00  00  111111  00000  111111  000000
      00 00      1111      0000      11   00     11  11  000000
      0000      11  11      00      11    00000  111111    00
      00 00    11111111    0000    11     00     11 11     00
      00  00  11      11  00  00  111111  00000  11  11    00
**/

#include<bits/stdc++.h>

using namespace std;

#define fto(i, a, b) for(int i = a; i <= b; ++i)
#define fdto(i, a, b) for(int i = a; i >= b; --i)
#define bugarr(a, i, j) cout << #a << "{" << i << "..." << j << "}:"; fto(k, i, j-1) cout << a[k] << ", "; cout << a[j] << endl;
#define ll long long
#define db double
#define ldb long double
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define eb emplace_back
#define vt vector
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define trav(i, a) for(auto &i : a)
#define sz(a) (int)a.size()
#define pi(a, b) pair<a, b>
#define fast ios::sync_with_stdio(false); cin.tie(0)

void setIO(string s) {
    if (sz(s) != 0) {
        freopen((s+".inp").c_str(),"r",stdin);
        freopen((s+".out").c_str(),"w",stdout);
    }
}

void setIOusaco(string s) {
    if (sz(s) != 0) {
        freopen((s+".in").c_str(),"r",stdin);
        freopen((s+".out").c_str(),"w",stdout);
    }
}

template<typename T, typename V>
bool ckmin(T &a, V b) {return (b < a)? a = b, true : false;}
template<typename T, typename V>
bool ckmax(T &a, V b) {return (b > a)? a = b, true : false;}

void print(int x) {cout << x;}
void print(long long x) {cout << x;}
void print(unsigned x) {cout << x;}
void print(unsigned long long x) {cout << x;}
void print(double x) {cout << fixed << x;}
void print(long double x) {cout << fixed << x;}
void print(char x) {cout << "'" << x << "'";}
void print(string x) {cout << '"' << x << '"';}
void print(bool x) {cout << (x ? "true" : "false");}

template<typename T, typename V>
void print(const pair<T, V> &x) {cout << '{'; print(x.ff); cout << ", "; print(x.ss); cout << '}';}
template<typename T>
void print(const T &x) {int f = 0; cout << '{'; for (auto &i: x) cout << (f++ ? ", " : ""), print(i); cout << "}";}
void _print() {cout << "]" << endl;}
template <typename T, typename... V>
void _print(T t, V... v) {print(t); if (sizeof...(v)) cout << ", "; _print(v...);}

#ifdef TAP
#define bug(x...) cout << "[" << #x << "] = ["; _print(x)
#else
#define bug(x...) 
#endif

const int maxN = 200008;
int p[maxN], low[maxN], num[maxN], cnt, type[maxN], depth[maxN], out[maxN], in[maxN];
vt<int> ke[maxN];

int findset(int i) {
	return (p[i] == i ? i : p[i] = findset(p[i]));
}

void unionset(int con, int cha) {
	p[findset(con)] = findset(cha);
}

void dfs(int u, int p = 0) {
	num[u] = low[u] = ++cnt;
	int path = 0;
	trav(v, ke[u]) {
		if (v == p && path == 0) {
			++path;
			continue;
		}
		if (num[v] == 0) {
			dfs(v, u);
			if (ckmin(low[u], low[v])) unionset(u, v);
		} else {
			if (ckmin(low[u], num[v])) unionset(u, v);
		}
	}
}

void dfs2(int u) {
	num[u] = 1;
	type[u] += out[u];
	type[u] -= in[u];
	trav(v, ke[u]) {
		if (num[v] != 0) continue;
		depth[v] = depth[u]+(findset(u) != findset(v));
		dfs2(v);
		bug(u, v, out[v], in[v]);
		type[u] += type[v];
	}
	bug(u, type[u]);
}

int main() {
    #ifndef TAP 
    setIO("");
    //setIOusaco("CEOI17_oneway");
    #endif

    fast;
    int n, m;
    cin >> n >> m;
    vt<pi(int, int)> canh;
    fto(i, 1, m) {
    	int u, v;
    	cin >> u >> v;
    	ke[u].pb(v);
    	ke[v].pb(u);
    	canh.pb({u, v});
    }
    fto(i, 1, n) p[i] = i;

    fto(i, 1, n) {
    	if (num[i] == 0) {
    		dfs(i);
    		num[i] = 0;
    	}
    }

    int q;
    cin >> q;
    fto(i, 1, q) {
    	int u, v;
    	cin >> u >> v;
    	out[u]++;
    	in[v]++;
    }

    fto(i, 1, n) num[i] = 0;

    fto(i, 1, n) {
    	if (num[i] == 0) dfs2(i);
    }

    trav(u, canh) {
    	if (findset(u.ff) == findset(u.ss)) {
    		cout << 'B';
    		continue;
    	}
    	int haveswap = 0;
    	//bug(u.ff, u.ss, depth[u.ff], depth[u.ss]);
    	if (depth[u.ff] < depth[u.ss]) {
    		haveswap = 1;
    		swap(u.ff, u.ss);
    	}
    	//bug(type[u.ff], haveswap);
    	if (type[u.ff] == 0) cout << 'B';
    	if (type[u.ff] > 0) cout << (haveswap ? 'L' : 'R');
    	if (type[u.ff] < 0) cout << (haveswap ? 'R' : 'L');
    }
    cout << '\n';

    return 0;
}

Compilation message

oneway.cpp: In function 'void setIO(std::string)':
oneway.cpp:34:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   34 |         freopen((s+".inp").c_str(),"r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
oneway.cpp:35:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   35 |         freopen((s+".out").c_str(),"w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
oneway.cpp: In function 'void setIOusaco(std::string)':
oneway.cpp:41:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   41 |         freopen((s+".in").c_str(),"r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
oneway.cpp:42:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   42 |         freopen((s+".out").c_str(),"w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4940 KB Output is correct
2 Correct 2 ms 4940 KB Output is correct
3 Correct 3 ms 5068 KB Output is correct
4 Correct 4 ms 5068 KB Output is correct
5 Correct 3 ms 5068 KB Output is correct
6 Correct 4 ms 5068 KB Output is correct
7 Correct 3 ms 5144 KB Output is correct
8 Correct 3 ms 5068 KB Output is correct
9 Correct 3 ms 5068 KB Output is correct
10 Correct 3 ms 5096 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4940 KB Output is correct
2 Correct 2 ms 4940 KB Output is correct
3 Correct 3 ms 5068 KB Output is correct
4 Correct 4 ms 5068 KB Output is correct
5 Correct 3 ms 5068 KB Output is correct
6 Correct 4 ms 5068 KB Output is correct
7 Correct 3 ms 5144 KB Output is correct
8 Correct 3 ms 5068 KB Output is correct
9 Correct 3 ms 5068 KB Output is correct
10 Correct 3 ms 5096 KB Output is correct
11 Correct 40 ms 9068 KB Output is correct
12 Correct 37 ms 10292 KB Output is correct
13 Correct 47 ms 11600 KB Output is correct
14 Correct 76 ms 12736 KB Output is correct
15 Correct 61 ms 12916 KB Output is correct
16 Correct 52 ms 11120 KB Output is correct
17 Correct 50 ms 13140 KB Output is correct
18 Correct 51 ms 11608 KB Output is correct
19 Correct 47 ms 14228 KB Output is correct
20 Correct 42 ms 10348 KB Output is correct
21 Correct 54 ms 10148 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4940 KB Output is correct
2 Correct 2 ms 4940 KB Output is correct
3 Correct 3 ms 5068 KB Output is correct
4 Correct 4 ms 5068 KB Output is correct
5 Correct 3 ms 5068 KB Output is correct
6 Correct 4 ms 5068 KB Output is correct
7 Correct 3 ms 5144 KB Output is correct
8 Correct 3 ms 5068 KB Output is correct
9 Correct 3 ms 5068 KB Output is correct
10 Correct 3 ms 5096 KB Output is correct
11 Correct 40 ms 9068 KB Output is correct
12 Correct 37 ms 10292 KB Output is correct
13 Correct 47 ms 11600 KB Output is correct
14 Correct 76 ms 12736 KB Output is correct
15 Correct 61 ms 12916 KB Output is correct
16 Correct 52 ms 11120 KB Output is correct
17 Correct 50 ms 13140 KB Output is correct
18 Correct 51 ms 11608 KB Output is correct
19 Correct 47 ms 14228 KB Output is correct
20 Correct 42 ms 10348 KB Output is correct
21 Correct 54 ms 10148 KB Output is correct
22 Correct 90 ms 13420 KB Output is correct
23 Correct 74 ms 11844 KB Output is correct
24 Correct 66 ms 11884 KB Output is correct
25 Correct 66 ms 16444 KB Output is correct
26 Correct 70 ms 13088 KB Output is correct
27 Correct 62 ms 11964 KB Output is correct
28 Correct 26 ms 6980 KB Output is correct
29 Correct 63 ms 9988 KB Output is correct
30 Correct 61 ms 10184 KB Output is correct
31 Correct 59 ms 10444 KB Output is correct
32 Correct 66 ms 12700 KB Output is correct