답안 #261779

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
261779 2020-08-12T04:57:25 Z cheeheng Colors (RMI18_colors) C++14
22 / 100
87 ms 7552 KB
#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> ii;

vector<int> AdjList[150005];
int a[150005];
int b[150005];
ii ab[150005];
int deg[150005];

int main(){
    int t;
    scanf("%d", &t);

    while(t --){
        int N, M;
        scanf("%d%d", &N, &M);

        for(int i = 1; i <= N; i ++){
            AdjList[i].clear();
            deg[i] = 0;
        }

        set<int> s1;
        for(int i = 1; i <= N; i ++){
            scanf("%d", &a[i]);
            s1.insert(a[i]);
        }

        for(int i = 1; i <= N; i ++){
            scanf("%d", &b[i]);
        }

        for(int i = 0; i < M; i ++){
            int u, v;
            scanf("%d%d", &u, &v);
            AdjList[u].push_back(v);
            AdjList[v].push_back(u);
            deg[u] ++;
            deg[v] ++;
        }

        int ans = 1;
        for(int i = 1; i <= N; i ++){
            if(b[i] > a[i] || s1.find(b[i]) == s1.end()){
                ans = 0;
                break;
            }
        }

        if(ans == 0){
            printf("0\n");
            continue;
        }

        int starVertex = -1;
        for(int i = 1; i <= N; i ++){
            if(deg[i] == N-1){
                starVertex = i;
                break;
            }
        }

        if((long long)M == (long long)N*(N-1)/2){
            multiset<int> s;
            for(int i = 1; i <= N; i ++){
                ab[i] = ii(a[i], b[i]);
                s.insert(a[i]);
            }
            sort(ab+1, ab+(N+1), greater<ii>());

            for(int i = 1; i <= N; i ++){
                if(ab[i].first == ab[i].second){continue;}
                if(ab[i].first < ab[i].second){
                    ans = 0;
                    break;
                }
                if(s.find(ab[i].second) != s.end()){

                }else{
                    ans = 0;
                    break;
                }

                s.erase(s.find(ab[i].first));
            }
            printf("%d\n", ans);
            continue;
        }

        if(starVertex != -1 && M == N-1){
            for(int i = 1; i <= N; i ++){
                if(i == starVertex){continue;}
                if(b[i] <= a[starVertex] && b[i] >= b[starVertex] || b[i] == a[i]){
                }else{
                    ans = 0;
                    break;
                }
            }
            printf("%d\n", ans);
            continue;
        }

        throw;
    }

    return 0;
}

Compilation message

colors.cpp: In function 'int main()':
colors.cpp:95:42: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
                 if(b[i] <= a[starVertex] && b[i] >= b[starVertex] || b[i] == a[i]){
                    ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
colors.cpp:14:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &t);
     ~~~~~^~~~~~~~~~
colors.cpp:18:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d", &N, &M);
         ~~~~~^~~~~~~~~~~~~~~~
colors.cpp:27:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d", &a[i]);
             ~~~~~^~~~~~~~~~~~~
colors.cpp:32:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d", &b[i]);
             ~~~~~^~~~~~~~~~~~~
colors.cpp:37:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d%d", &u, &v);
             ~~~~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 87 ms 3840 KB Output is correct
2 Correct 32 ms 3960 KB Output is correct
3 Correct 7 ms 3968 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 86 ms 3840 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 8 ms 7552 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 8 ms 7552 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 87 ms 3840 KB Output is correct
2 Correct 32 ms 3960 KB Output is correct
3 Correct 7 ms 3968 KB Output is correct
4 Runtime error 8 ms 7552 KB Execution killed with signal 11 (could be triggered by violating memory limits)
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 8 ms 7552 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 8 ms 7552 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 87 ms 3840 KB Output is correct
2 Correct 32 ms 3960 KB Output is correct
3 Correct 7 ms 3968 KB Output is correct
4 Correct 86 ms 3840 KB Output is correct
5 Runtime error 8 ms 7552 KB Execution killed with signal 11 (could be triggered by violating memory limits)
6 Halted 0 ms 0 KB -