답안 #380752

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
380752 2021-03-22T22:37:20 Z nikolapesic2802 Flood (IOI07_flood) C++14
67 / 100
335 ms 22440 KB
#include<bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define dec(x, y) fixed << setprecision((y)) << (x)
#define xx first
#define yy second
#define srt(v) sort((v).begin(), (v).end())
#define srtr(v) sort((v).rbegin(), (v).rend())
#define pb push_back
#define popb pop_back
#define sz(a) (int)(a).size()
#define len(a) (int)(a).length()
#define mp make_pair
#define all(x) x.begin(),x.end()
 
using namespace std;
 
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
 
int n, m;
vector<pair<pii, int>> tac;
vector<pii> graf[4][100010];
int pos[200010];
stack<int> dosad;
vector<int> dobre;
bool izasao, nap;
int poc;
inline bool ista(int a, int b, int c) {
    if((b<c && a==1) || (b>c && a==2)) return true;
    return false;
}
void dfs(int node, int smer) {
    if(izasao&&node==poc) {
        nap=1;
        return;
    }
    for(int s=smer+1; s<=smer+4; ++s) {
        for(auto adj:graf[s%4][node]) {
            if(pos[adj.yy]!=2) {
                if(pos[adj.yy]==1) dobre.pb(adj.yy);
                pos[adj.yy]=1;
                dosad.push(adj.yy);
                izasao=1;
                dfs(adj.xx, (s%4)^2);
                if(nap==1) return;
            }
        }
    }
}
void gotovo() {
    while(!dosad.empty()) {
        int tren=dosad.top();
        pos[tren]=2;
        dosad.pop();
    }
}
int main() {
    /// graf: 0 gore, 1 desno, 2 dole, 3 levo
    //ios;
    cin >> n;
    for(int i=1; i<=n; ++i) {
        int x, y; cin >> x >> y;
        tac.pb(mp(mp(x, y), i));
    }
    cin >> m;
    for(int i=1; i<=m; ++i) {
        int u, v; cin >> u >> v;
        int kod;
        if(tac[u-1].xx.yy==tac[v-1].xx.yy) {
            if(tac[u-1].xx.xx>tac[v-1].xx.xx) kod=0;
            else kod=2;
        }
        else {
            if(tac[u-1].xx.yy<tac[v-1].xx.yy) kod=3;
            else kod=1;
        }
        graf[kod][u].pb(mp(v, i));
        graf[kod^2][v].pb(mp(u, i));
    }
    sort(tac.begin(), tac.end());
    for(int i=0; i<n; ++i) {
        izasao=0;
        poc=tac[i].yy;
        nap=0;
        dfs(tac[i].yy, 0);
        gotovo();
    }
    int siz=sz(dobre);
    sort(all(dobre));
    dobre.erase(unique(all(dobre)),dobre.end());
    assert(sz(dobre)==siz);
    cout << sz(dobre) << "\n";
    for(auto dd:dobre) {
        cout << dd << "\n";
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 9708 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 9776 KB Output is correct
2 Correct 8 ms 9708 KB Output is correct
3 Correct 7 ms 9708 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 9708 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 9708 KB Output is correct
2 Correct 8 ms 9836 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 9708 KB Output is correct
2 Correct 8 ms 9708 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 9708 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 9708 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 9708 KB Output is correct
2 Correct 8 ms 9836 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 9 ms 9836 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 43 ms 11628 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 150 ms 21624 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 145 ms 16740 KB Output is correct
2 Incorrect 335 ms 22440 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 291 ms 20836 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 329 ms 22052 KB Output isn't correct
2 Halted 0 ms 0 KB -