Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <unordered_map>
- #include <string>
- #include <map>
- #include <cmath>
- #include <algorithm>
- #include <set>
- #define ll long long
- #define len(v) (int)v.size()
- #define all(v) v.begin(), v.end()
- const ll maxn = 2e5 + 10;
- const int logn = 20;
- const ll inf = 1e18;
- const int mod = 1e9 + 7;
- using namespace std;
- /*void solve() {
- int n; cin >> n;
- vector<int> a(n), b(n);
- for (int i = 0; i < n; ++i) {
- cin >> a[i];
- b[i] = abs(a[i]);
- }
- int i = 0, d;
- for (; i < (len(b) - 1) && b[i] >= b[i + 1]; ++i);
- d = i;
- for (; i < (len(b) - 1) && b[i] <= b[i + 1]; ++i);
- if (i != len(b) - 1) {
- cout << "NO\n";
- return;
- }
- int cntrminus = 0, cntrplus = 0, cntlminus = 0, cntlplus = 0;
- for (int i = len(a) - 2; i >= 0 && b[i] <= b[i + 1]; --i) {
- if (a[i] > 0) cntrplus++;
- else cntrminus++;
- }
- for (int i = 0; i < len(a) - 2 && b[i] >= b[i + 1]; ++i) {
- if (a[i] > 0) cntlplus++;
- else cntlminus++;
- }
- if ((cntlplus == cntrminus))
- cout << "YES\n";
- else cout << "NO\n";
- }*/
- void solve1() {
- int n;
- cin >> n;
- vector<ll> p(1 << n);
- for (int i = 0; i < (1 << n); ++i)
- cin >> p[i];
- for (ll i = 1; i < (1ll << n); ++i) {
- ll s = i;
- s = (s - 1) & i;
- while (s > 0) {
- //p[i] += a[s]; s подмаска i
- p[i] -= p[s];
- s = (s - 1) & i;
- }
- //a[i] += p[0];
- p[i] -= p[0];
- }
- for (auto el : p)
- cout << el << " ";
- }
- void solve() {
- int n, m;
- cin >> n >> m;
- vector<int> gmask(n, 0);
- for (int i = 0; i < m; ++i) {
- int u, v;
- cin >> u >> v;
- --u; --v;
- gmask[u] += 1 << v;
- gmask[v] += 1 << u;
- }
- vector<bool> dp(1 << n, false);
- dp[0] = 1;
- for (int i = 0; i < n; ++i) {
- dp[1 << i] = 1;
- }
- for (int mask = 0; mask < (1 << n); ++mask) {
- if (!dp[mask]) continue;
- for (int k = 0; k < n; ++k) {
- if ((mask & gmask[k] == 0) && ((mask >> k) & 1 == 0))
- dp[mask ^ (1 << k)] = 1;
- }
- }
- vector<int> fm(1 << n), binpow(1 << n);
- for (int mask = 0; mask < (1 << n); ++mask) {
- fm[mask] = (int)dp[mask];
- }
- for (int k = 0; k < n; ++k) {
- for (int mask = 0; mask < (1 << n); ++mask) {
- if ((mask >> k) & 1)
- fm[mask] = (fm[mask] + fm[mask ^ (1 << k)]) % mod;
- }
- }
- binpow[0] = 1;
- for (int i = 1; i < (1 << n); ++i) {
- binpow[i] = (binpow[i - 1] * 2) % mod;
- }
- for (auto el : fm)
- cout << el << " ";
- /*vector<int> binpow(1 << n, 0);
- binpow[0] = 1;
- for (int i = 1; i < (1 << 23); ++i) {
- binpow[i] = (binpow[i - 1] * 2) % mod;
- }*/
- }
- int main() {
- ios::sync_with_stdio(false);
- cin.tie(nullptr);
- cout.tie(nullptr);
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment