Advertisement
Guest User

Untitled

a guest
Nov 30th, 2021
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.48 KB | None | 0 0
  1. /*
  2. #pragma GCC optimize("O3")
  3. #pragma GCC target("sse4,avx2,abm,fma,tune=native")
  4. #pragma GCC optimize("unroll-loops")
  5. */
  6.  
  7. #include <bits/stdc++.h>
  8. using namespace std;
  9. #define mp(a,b) make_pair(a,b)
  10. #define ff first
  11. #define setp(a) setprecision(a)<<fixed
  12. #define ss second
  13. #define fori(v) for(ll i=0; i<v; i++)
  14. #define forj(v) for(ll j=0; j<v; j++)
  15. #define fork(v) for(ll k=0; k<v; k++)
  16. #define forl(v) for(ll l=0; l<v; l++)
  17. #define fort(v) for(ll t=0; t<v; t++)
  18. #define forz(v) for(ll z=0; z<v; z++)
  19. #define forx(v) for(ll x=0; x<v; x++)
  20. #define fory(v) for(ll y=0; y<v; y++)
  21. #define ll long long
  22. #define pb(a) push_back(a)
  23. #define mt make_tuple
  24. const ll INF = 0x3f3f3f3f;
  25. const ll inf =  1e9;
  26. ll modulo = pow(10,9) + 7;
  27.  
  28. ll getmin(vector<int>& arr, vector<vector<int> >& dt){
  29.       ll n = arr.size();
  30.       vector<vector<int> > dp(1<<n, vector<int>(n, inf));
  31.       dp[(1<<0)][0] = 0;
  32.       for(int i =  0 ; i<(1<<n); i++){
  33.             for(int j = 0; j<n; j++){
  34.                   if((1<<j) & i){
  35.                         for(int k = 0; k<n; k++){
  36.                               if(!((1<<k) & i)){
  37.                                     int bt = (i^(1<<k));
  38.                                     dp[bt][k] = min(dp[bt][k], dp[i][j] + dt[arr[j]][arr[k]]);
  39.                               }
  40.                         }
  41.                   }
  42.             }
  43.       }
  44.       int mn = inf;
  45.       fori(n){
  46.             mn = min(mn, dp[((1<<n)-1)][i]);
  47.       }
  48.       return mn;
  49. }
  50.  
  51. void deal(){
  52.       ll n, m, k;
  53.       cin>>n>>m>>k;
  54.       vector<vector<int> > g(n);
  55.       vector<vector<int> > dt(n, vector<int>(n, inf));
  56.       fori(n){
  57.             dt[i][i] = 0;
  58.       }
  59.       fori(m){
  60.             ll ai, bi;
  61.             cin>>ai>>bi;
  62.             --ai, --bi;
  63.             g[ai].pb(bi);
  64.             g[bi].pb(ai);
  65.             dt[ai][bi] = 1;
  66.             dt[bi][ai] = 1;
  67.       }
  68.       forj(n){
  69.             fori(n){
  70.                   fork(n){
  71.                         dt[i][k] = min(dt[i][k], dt[i][j] + dt[j][k]);
  72.                   }
  73.             }
  74.       }
  75.       vector<int> all({0});
  76.       ll ans = 0;
  77.       for(ll i = n-1; i ; i--){
  78.             auto cur = all;
  79.             cur.pb(i);
  80.             if(getmin(cur, dt) <= k){
  81.                   all = cur;
  82.                   ans += (1ll << i) - 1;
  83.             }
  84.             if(all.size() == k+1){
  85.                   break;
  86.             }
  87.       }
  88.       cout<<ans;
  89. }
  90.  
  91. int main() {
  92.     cin.tie(0);
  93.     ios_base::sync_with_stdio(0);
  94.     deal();
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement