提出 #70053909
ソースコード 拡げる
#include <bits/stdc++.h>
// =============================================================================
// 入力
// =============================================================================
// 可変長汎用入力関数
void in_impl () {}
template <typename T, typename... TS>
void in_impl (T& head, TS&... tail) {
std::cin >> head;
in_impl(tail ...);
}
// 可変長汎用入力マクロ
#define IN(T, ...) T __VA_ARGS__; in_impl(__VA_ARGS__)
// pair<T1,T2>の入力
template <typename T1, typename T2>
std::istream& operator>> (std::istream& is, std::pair<T1, T2>& p) {
is >> p.first >> p.second;
return is;
}
// vector<T>の入力
template <typename T>
std::istream& operator>> (std::istream& is, std::vector<T>& v) {
for (auto&& vi : v) is >> vi;
return is;
}
// =============================================================================
// 出力
// =============================================================================
// pair<T1,T2>の出力
template <typename T1, typename T2>
std::ostream& operator<< (std::ostream& os, const std::pair<T1, T2>& p) {
os << p.first << ' ' << p.second;
return os;
}
// vector<T>の出力
template <typename T>
std::ostream& operator<< (std::ostream& os, const std::vector<T>& v) {
for (int i = 0, s = v.size(); i < s; ++i) {
if (i) os << ' ';
os << v[i];
}
return os;
}
// set<T>の出力
template <typename T>
std::ostream& operator<< (std::ostream& os, const std::set<T>& st) {
auto itr = st.begin();
int n = st.size();
for (int i = 0; i < n; ++i, ++itr) {
if (i) os << ' ';
os << (*itr);
}
return os;
}
// multiset<T>の出力
template <typename T>
std::ostream& operator<< (std::ostream& os, const std::multiset<T>& st) {
auto itr = st.begin();
int n = st.size();
for (int i = 0; i < n; ++i, ++itr) {
if (i) os << ' ';
os << (*itr);
}
return os;
}
// unordered_set<T>の出力
template <typename T>
std::ostream& operator<< (std::ostream& os, const std::unordered_set<T>& st) {
auto itr = st.begin();
int n = st.size();
for (int i = 0; i < n; ++i, ++itr) {
if (i) os << ' ';
os << (*itr);
}
return os;
}
// map<Key,Val>の出力
template <typename Key, typename Val>
std::ostream& operator<< (std::ostream& os, const std::map<Key, Val>& mp) {
auto itr = mp.begin();
int n = mp.size();
for (int i = 0; i < n; ++i, ++itr) {
if (i) os << ' ';
auto [key, val] = *itr;
os << key << ':' << val;
}
return os;
}
// unordered_map<Key,Val>の出力
template <typename Key, typename Val>
std::ostream& operator<< (std::ostream& os, const std::unordered_map<Key, Val>& mp) {
auto itr = mp.begin();
int n = mp.size();
for (int i = 0; i < n; ++i, ++itr) {
if (i) os << ' ';
auto [key, val] = *itr;
os << key << ':' << val;
}
return os;
}
// =============================================================================
// ハッシュ(unordered_XXXで使用する)
// =============================================================================
// hashを組み合わせる関数
// 参考: boost::hash_combine(https://www.boost.org/doc/libs/1_55_0/doc/html/hash/reference.html#boost.hash_combine)
template <typename T>
size_t hash_combine (const size_t seed, const T& x) {
return seed ^ (std::hash<T>()(x) + 0x9e3779b9 + (seed << 6) + (seed >> 2));
}
// pair用のhash
template <typename T1, typename T2>
struct std::hash<std::pair<T1, T2>> {
size_t operator() (const std::pair<T1, T2>& p) const noexcept {
size_t seed = 0;
seed = hash_combine(seed, p.first);
seed = hash_combine(seed, p.second);
return seed;
}
};
// tuple用のhash
template <int N>
struct HashTuple {
template <typename Tuple>
size_t operator() (const Tuple& tuple) const noexcept {
size_t seed = HashTuple<N-1>()(tuple);
return hash_combine(seed, std::get<N-1>(tuple));
}
};
template <>
struct HashTuple<0> {
template <typename Tuple>
size_t operator() (const Tuple& tuple) const noexcept {
return 0;
}
};
template <typename... Args>
struct std::hash<std::tuple<Args...>> {
size_t operator() (const std::tuple<Args...>& tuple) const noexcept {
return HashTuple<std::tuple_size<std::tuple<Args...>>::value>()(tuple);
}
};
// =============================================================================
// マクロ
// =============================================================================
// 反復
#define GET_REP(_1, _2, _3, NAME, ...) NAME
#define REP_2(i, N) for (int i = 0; i < (int)(N); ++i)
#define REP_3(i, A, B) for (int i = (A); i < (int)(B); ++i)
#define rep(...) GET_REP(__VA_ARGS__, REP_3, REP_2)(__VA_ARGS__)
#define RREP_2(i, N) for (int i = (int)(N)-1; i >= 0; --i)
#define RREP_3(i, A, B) for (int i = (int)(B)-1; i >= (int)(A); --i)
#define rrep(...) GET_REP(__VA_ARGS__, RREP_3, RREP_2)(__VA_ARGS__)
// イテレータ
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
// メンバ変数・関数
#define fst first
#define scd second
#define PB push_back
#define EB emplace_back
// 文字
#define el '\n'
#define spa ' '
// Yes, No
#define YES std::cout << "YES" << std::endl
#define NO std::cout << "NO" << std::endl
#define Yes std::cout << "Yes" << std::endl
#define No std::cout << "No" << std::endl
#define yes std::cout << "yes" << std::endl
#define no std::cout << "no" << std::endl
#define YESNO(b) std::cout << ((b) ? "YES" : "NO") << std::endl
#define YesNo(b) std::cout << ((b) ? "Yes" : "No") << std::endl
#define yesno(b) std::cout << ((b) ? "yes" : "no") << std::endl
// デバッグ
#define debug(x) std::cerr << #x << " = " << (x) << std::endl
// using宣言
using namespace std;
using ll = long long;
using ull = unsigned long long;
using pii = pair<int,int>;
using pll = pair<ll,ll>;
using vi = vector<int>;
using vvi = vector<vi>;
using vpii = vector<pii>;
using vl = vector<ll>;
using vvl = vector<vl>;
using vpll = vector<pll>;
// 定数
constexpr int INF = std::numeric_limits<int>::max();
constexpr ll INFLL = std::numeric_limits<ll>::max();
const string ABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const string abc = "abcdefghijklmnopqrstuvwxyz";
const vpii DX = {{-1,0},{1,0},{0,-1},{0,1}};
int main () {
IN(int, n, m);
vpii E(m);
rep(i, m) {
IN(int, u, v);
--u, --v;
E[i] = {u, v};
}
int res = m;
vi color(n);
for (int i = 0, p = 1<<n; i < p; ++i) {
for (int j = i, k = 0; k < n; ++k, j >>= 1) {
if (j&1) {
color[k] = 1;
}
else {
color[k] = 0;
}
}
int cnt = 0;
rep(l, m) {
auto [u, v] = E[l];
if (color[u] != color[v]) ++cnt;
}
res = min(res, m-cnt);
}
cout << res << endl;
}
提出情報
| 提出日時 |
|
| 問題 |
C - Bipartize |
| ユーザ |
WaTeR7 |
| 言語 |
C++ 20 (gcc 12.2) |
| 得点 |
350 |
| コード長 |
7236 Byte |
| 結果 |
AC |
| 実行時間 |
1 ms |
| メモリ |
3656 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
350 / 350 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
| All |
00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt, 01_random_22.txt, 01_random_23.txt, 01_random_24.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| 00_sample_00.txt |
AC |
1 ms |
3448 KiB |
| 00_sample_01.txt |
AC |
1 ms |
3536 KiB |
| 00_sample_02.txt |
AC |
1 ms |
3436 KiB |
| 01_random_03.txt |
AC |
1 ms |
3436 KiB |
| 01_random_04.txt |
AC |
1 ms |
3540 KiB |
| 01_random_05.txt |
AC |
1 ms |
3472 KiB |
| 01_random_06.txt |
AC |
1 ms |
3452 KiB |
| 01_random_07.txt |
AC |
1 ms |
3540 KiB |
| 01_random_08.txt |
AC |
1 ms |
3540 KiB |
| 01_random_09.txt |
AC |
1 ms |
3472 KiB |
| 01_random_10.txt |
AC |
1 ms |
3568 KiB |
| 01_random_11.txt |
AC |
1 ms |
3468 KiB |
| 01_random_12.txt |
AC |
1 ms |
3372 KiB |
| 01_random_13.txt |
AC |
1 ms |
3476 KiB |
| 01_random_14.txt |
AC |
1 ms |
3500 KiB |
| 01_random_15.txt |
AC |
1 ms |
3464 KiB |
| 01_random_16.txt |
AC |
1 ms |
3468 KiB |
| 01_random_17.txt |
AC |
1 ms |
3500 KiB |
| 01_random_18.txt |
AC |
1 ms |
3468 KiB |
| 01_random_19.txt |
AC |
1 ms |
3532 KiB |
| 01_random_20.txt |
AC |
1 ms |
3448 KiB |
| 01_random_21.txt |
AC |
1 ms |
3656 KiB |
| 01_random_22.txt |
AC |
1 ms |
3456 KiB |
| 01_random_23.txt |
AC |
1 ms |
3568 KiB |
| 01_random_24.txt |
AC |
1 ms |
3492 KiB |