Submission #37348546


Source Code Expand

#include <iostream>
#include <iomanip>
#include <limits>
#include <vector>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <cstdio>
#include <bitset>
#include <queue>
#include <deque>
#include <algorithm>
#include <numeric>
#include <functional>
#include <stack>
#include <cmath>
#include <string>
#include <cstring>
#include <complex>
#include <cassert>
#include <cstdlib>
using namespace std;

typedef long long ll;

template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }

const int INF = (1<<30)-1;
const int MOD = 1e9+7;
const ll LINF = (1ll<<62)-1;

#define REP(i,n) for(int i=0;i<(n);++i)
#define COUT(x) cout<<(x)<<"\n"
#define COUT16(x) cout << fixed << setprecision(16) << (x) << "\n"

using Graph = vector<vector<int>>;

// 二部グラフ判定
vector<int> color;
bool dfs(const Graph &G, int v, int cur = 0) {
    color[v] = cur;
    for (auto next_v : G[v]) {
        // 隣接頂点がすでに色確定していた場合
        if (color[next_v] != -1) {
            if (color[next_v] == cur) return false; // 同じ色が隣接したらダメ
            continue;
        }

        // 隣接頂点の色を変えて、再帰的に探索 (一回でも false が返ってきたら false)
        if (!dfs(G, next_v , 1 - cur)) return false;
    }
    return true;
}

int main(){    
    // 頂点数と辺数
    int N, M; cin >> N >> M;

    // グラフ入力受取
    Graph G(N);
    queue<int> que;
    vector<int> visited(N),kyori(N,0);
    vector<vector<int>> ex_kyori(N); 
    for (int i = 0; i < M; ++i) {
        int a, b;
        cin >> a >> b;
        --a;--b;
        if(i==0){
            que.push(a);
            visited[a] = 1;
        }
        G.at(a).push_back(b);
        G.at(b).push_back(a);
    }

    // 探索
    color.assign(N, -1);
    bool is_bipartite = true;
    for (int v = 0; v < N; ++v) {
        if (color.at(v) != -1) continue; // v が探索済みだったらスルー
        if (!dfs(G, v)) is_bipartite = false;
    }

    if(!is_bipartite){
        COUT(0);
    }
    else{
        while(!que.empty()){
            int from = que.front();
            que.pop();
            for(int i=0;i<G.at(from).size();i++){
                int to = G.at(from).at(i);
                if(visited[to] == 0){
                    visited[to] = 1;
                    kyori[to] = kyori[from] + 1;
                    que.push(to);
                }
            }
        }
        for(int i=0;i<N;i++){
            int p = kyori[i];
            ex_kyori[p].push_back(i);
        }
        ll even=0,odd=0;
        for(int i=0;i<N;i++){
            if(i%2==0)even+=ex_kyori[i].size();
            else odd += ex_kyori[i].size();
        }
        ll count = 0;
        for(int i=0;i<N;i++){
            if(visited[i]==0)count += N-1;
            else{
                if(kyori[i]%2==0)count += odd;
                else count += even;
                count -= G.at(i).size();
            }
        }
        COUT(count/2);
    }
}

Submission Info

Submission Time
Task D - Make Bipartite 2
User Knots
Language C++ (GCC 9.2.1)
Score 0
Code Size 3263 Byte
Status WA
Exec Time 185 ms
Memory 33504 KiB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:93:26: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   93 |             for(int i=0;i<G.at(from).size();i++){
      |                         ~^~~~~~~~~~~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 400
Status
AC × 3
AC × 30
WA × 17
Set Name Test Cases
Sample example0.txt, example1.txt, example2.txt
All 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, 037.txt, 038.txt, 039.txt, 040.txt, 041.txt, 042.txt, 043.txt, example0.txt, example1.txt, example2.txt
Case Name Status Exec Time Memory
000.txt AC 7 ms 3604 KiB
001.txt AC 2 ms 3536 KiB
002.txt AC 18 ms 15936 KiB
003.txt AC 14 ms 15084 KiB
004.txt AC 133 ms 24080 KiB
005.txt AC 179 ms 31120 KiB
006.txt AC 185 ms 33504 KiB
007.txt AC 150 ms 30432 KiB
008.txt AC 67 ms 6408 KiB
009.txt AC 65 ms 5556 KiB
010.txt AC 66 ms 5564 KiB
011.txt AC 44 ms 7216 KiB
012.txt WA 50 ms 16760 KiB
013.txt AC 77 ms 7600 KiB
014.txt AC 128 ms 20148 KiB
015.txt WA 30 ms 16828 KiB
016.txt WA 15 ms 15964 KiB
017.txt WA 18 ms 16084 KiB
018.txt WA 16 ms 15944 KiB
019.txt AC 134 ms 16608 KiB
020.txt AC 31 ms 4360 KiB
021.txt AC 80 ms 6308 KiB
022.txt AC 33 ms 4476 KiB
023.txt AC 33 ms 4396 KiB
024.txt WA 59 ms 18500 KiB
025.txt WA 35 ms 16700 KiB
026.txt WA 15 ms 16012 KiB
027.txt WA 17 ms 15764 KiB
028.txt WA 16 ms 15944 KiB
029.txt AC 101 ms 9080 KiB
030.txt AC 96 ms 7956 KiB
031.txt AC 80 ms 6684 KiB
032.txt AC 73 ms 5932 KiB
033.txt AC 10 ms 3728 KiB
034.txt WA 101 ms 20368 KiB
035.txt WA 19 ms 15920 KiB
036.txt WA 30 ms 16688 KiB
037.txt WA 17 ms 16100 KiB
038.txt WA 16 ms 15960 KiB
039.txt WA 149 ms 22104 KiB
040.txt WA 110 ms 11504 KiB
041.txt AC 77 ms 6364 KiB
042.txt AC 70 ms 5832 KiB
043.txt AC 5 ms 3532 KiB
example0.txt AC 2 ms 3380 KiB
example1.txt AC 2 ms 3576 KiB
example2.txt AC 2 ms 3444 KiB