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 |
|
|
| 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 |