답안 #1057350

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1057350 2024-08-13T17:47:10 Z mindiyak Paths (BOI18_paths) C++14
23 / 100
1876 ms 1048580 KB
#pragma GCC optimize("O1,O2,O3,Ofast,unroll-loops")
#include <bits/stdc++.h>
#include <string>
#include <iostream>
#include <cmath>
#include <numeric>
#include <stack>
#include <queue>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> pi;
typedef pair<ll, ll> pl;
typedef pair<ld, ld> pd;
typedef vector<int> vi;
typedef vector<bool> vb;
typedef vector<vector<int>> vvi;
typedef vector<vector<pi>> vvpi;
typedef vector<ld> vd;
typedef vector<long long> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
#define FOR(i, a, b) for (int i = a; i < (b); i++)
#define F0R(i, a) for (int i = 0; i < (a); i++)
#define FORd(i, a, b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i, a) for (int i = (a)-1; i >= 0; i--)
#define trav(a, x) for (auto &a : x)
#define uid(a, b) uniform_int_distribution<int>(a, b)(rng)
#define len(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define F first
#define nl endl
#define S second
#define lb lower_bound
#define ub upper_bound
#define aint(x) x.begin(), x.end()
#define raint(x) x.rbegin(), x.rend()
#define ins insert
const int M = 1e9+7;
void init(string name)
{
    freopen((name + ".in").c_str(), "r", stdin);
    freopen((name + ".out").c_str(), "w", stdout);
}
void fastIO()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
}

int n,m,k;
vvi paths(3e5+10,vi());
vi color(3e5+10);
ll ans = 0;
map <vi,vi> cnt;

void proc(vi perm){
    vi arr,arr2;
    int pos = 0;

    FOR(i,0,n)arr2.pb(i);

    while(pos < perm.size()){
        arr.pb(perm[pos]);
        if(cnt.count(arr)==0){
            vi arr3;
            if(pos == 0){
                FOR(i,0,n){
                    if(color[i] == perm[pos]){
                        arr3.pb(i);
                    }
                }
            }else{
                for(int a:arr2){
                    for(int b:paths[a]){
                        if(color[b] == perm[pos]){
                            // FOR(i,0,pos+1)cerr << perm[i] << " ";
                            // cerr  << " | " << a << " " << b << " " << color[b] << endl;
                            arr3.pb(b);
                        }
                    }
                }
            }
            cnt[arr] = arr3;
        }
        arr2 = cnt[arr];
        pos ++;
    }
}
 
void solve()
{
    cin >> n >> m >> k;
    FOR(i,0,n)cin >> color[i];
    FOR(i,0,m){
        int a,b;cin >> a >> b;
        a--;b--;
        paths[a].pb(b);
        paths[b].pb(a);
    }

    vi perm;
    FOR(i,1,k+1)perm.pb(i);
    do { 
        proc(perm); 
    } while (next_permutation(perm.begin(), perm.end())); 

    // cerr << "****" << endl;

    for(auto& [key, value]:cnt){
        // for(int a:key)cerr << a << " ";
        // cerr << " | ";
        // for(int a:value)cerr << a << " ";
        // cerr << endl;
        if(key.size() > 1)ans += value.size();
    }

    cout << ans << endl;
}   
 
 
int main()
{
    fastIO();
    // init("test");
    int t = 1;
    // cin >> t;
    while (t--)
        solve();
    return 0;
}

Compilation message

paths.cpp: In function 'void proc(vi)':
paths.cpp:65:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |     while(pos < perm.size()){
      |           ~~~~^~~~~~~~~~~~~
paths.cpp: In function 'void solve()':
paths.cpp:112:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  112 |     for(auto& [key, value]:cnt){
      |               ^
paths.cpp: In function 'void init(std::string)':
paths.cpp:44:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   44 |     freopen((name + ".in").c_str(), "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
paths.cpp:45:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   45 |     freopen((name + ".out").c_str(), "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 8536 KB Output is correct
2 Correct 2 ms 8540 KB Output is correct
3 Correct 2 ms 8540 KB Output is correct
4 Correct 2 ms 8540 KB Output is correct
5 Correct 2 ms 8540 KB Output is correct
6 Correct 2 ms 8540 KB Output is correct
7 Correct 2 ms 8540 KB Output is correct
8 Correct 2 ms 8540 KB Output is correct
9 Correct 3 ms 8540 KB Output is correct
10 Correct 2 ms 8540 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 273 ms 94068 KB Output is correct
2 Correct 1258 ms 504632 KB Output is correct
3 Correct 108 ms 27944 KB Output is correct
4 Correct 51 ms 18832 KB Output is correct
5 Correct 44 ms 16720 KB Output is correct
6 Runtime error 1876 ms 1048576 KB Execution killed with signal 9
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 8536 KB Output is correct
2 Correct 2 ms 8540 KB Output is correct
3 Correct 2 ms 8540 KB Output is correct
4 Correct 2 ms 8540 KB Output is correct
5 Correct 2 ms 8540 KB Output is correct
6 Correct 2 ms 8540 KB Output is correct
7 Correct 2 ms 8540 KB Output is correct
8 Correct 2 ms 8540 KB Output is correct
9 Correct 3 ms 8540 KB Output is correct
10 Correct 2 ms 8540 KB Output is correct
11 Correct 273 ms 94068 KB Output is correct
12 Correct 1258 ms 504632 KB Output is correct
13 Correct 108 ms 27944 KB Output is correct
14 Correct 51 ms 18832 KB Output is correct
15 Correct 44 ms 16720 KB Output is correct
16 Runtime error 1876 ms 1048576 KB Execution killed with signal 9
17 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 8540 KB Output is correct
2 Runtime error 1055 ms 1048580 KB Execution killed with signal 9
3 Halted 0 ms 0 KB -