이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define int long long
#define P(x) do {if(debug) cout << x << endl;} while(false)
#define H(x) P(#x << ": " << x)
#define FR(i, a, b) for(int i = (a); i < (b); ++i)
#define F(i, n) FR(i, 0, n)
#define DR(i, a, b) for(int i = (b); i --> (a);)
#define D(i, n) DR(i, 0, n)
#define S(s) (int)(s).size()
#define ALL(x) (x).begin(), (x).end()
#define MI(x, a) (x) = min(x, a)
#define MA(x, a) (x) = max(x, a)
#define V vector
#define pb push_back
#define mp make_pair
using namespace std;
const bool debug = 0;
int factorial[] = {1, 1, 2, 6, 24, 120, 720};
int N,M,K;
vector<vector<int> > sets;
vector<int> color;
vector<int> place;
vector<vector<int> > graph;
/*vector<int> gen(vector<int> a, int i, int j){
P("gen"<< i << " " << j<<" "<<factorial[a.size()-1]);
if(j == 1) return {a[i]};
//int j = a.size();
vector<int> res(j);
res[0] = i/factorial[a.size()-1];
int ggggg = a[res[0]];
int ff = 0;
FR(k, 0, a.size()-1){
if(k == res[0]) ff++;
a[k] = a[k+ff];
H(a[k]);
}
a.pop_back();
vector<int> v = gen(a, i%factorial[a.size()], j-1);
F(k, j-1){
res[k+1] = v[k];
}
res[0] = ggggg;
return res;
}
int ptoint(vector<int> v){
int res = 0;
for(int i = 0; i<v.size(); i++){
res += (v[i]+1)*factorial[K-i+1];
}
return res;
}*/
vector<int> colortocolor(int c1, int c2, vector<int> base, vector<int>& res){
//vector<int> res(sets[c2].size(), 0);
for(int u : sets[c1]){
for(int v : graph[u]) if(color[v] == c2){
res[v] += base[u];
}
}
return res;
}
string bin(int a){
string s;
for(int i = 0; i<6; i++){
s+='0' + ((a & (1<<i))>>i);
}
return s;
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>N>>M>>K;
sets.resize(K);
color.resize(N);
graph.resize(N);
place.resize(N);
F(i, N){
int a;
cin>>a;
a--;
place[i] = sets[a].size();
color[i]=a;
sets[a].push_back(i);
}
F(i, M){
int a, b;
cin>>a>>b;
a--;
b--;
graph[a].push_back(b);
graph[b].push_back(a);
}
P("DDDDDD");
vector<vector<int> > dp(N, vector<int>(1<<K, 0));
P("CCCCCC");
F(i, N){
dp[i][1<<color[i]] = 1;
}
P("BBBBBBBb");
FR(bs, 1, (1<<K)){
F(j, N) if(((1<<color[j])&bs)!=0){
for(int k : graph[j]) if(((1<<color[k])&bs)!=0){
P(bin(bs) <<" "<< j <<" "<< k<< " "<< bin(bs-(1<<color[k])));
dp[j][bs] += dp[k][bs-(1<<color[j])];
P(dp[j][bs]);
}
}
}
P("AAAAAAAAAAA");
int sum = 0;//
F(i, N) F(j, 1<<K){
P(i<<" "<<bin(j)<<": "<<dp[i][j]);
sum+=dp[i][j];
}
cout<<sum-N;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |