제출 #1220839

#제출 시각아이디문제언어결과실행 시간메모리
1220839TrumlingAmusement Park (CEOI19_amusementpark)C++20
19 / 100
3093 ms436 KiB
//Trumling ©
//Αφόδευε υψηλά και ηγνάντει 
#include <bits/stdc++.h>
using namespace std; 

typedef long long ll;
#define pb push_back
#define F first
#define S second
#define enter cout<<'\n';
#define INF 99999999999999999
#define MOD 998244353
#define all(x) x.begin(),x.end()

int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);

ll n,m;
cin>>n>>m;

pair<ll,ll> arr[m];
vector<vector<bool>>g(n+1,vector<bool>(n+1,0));
for(int i=0;i<m;i++)
    {
        cin>>arr[i].F>>arr[i].S;
        g[arr[i].F][arr[i].S]=1;
    }

ll ans=0;
for(int i=0;i<(1<<m);i++)
{
    ll cost=0;
    for(int j=0;j<m;j++)
        if(i&(1<<j))
            {
                cost++;
                g[arr[j].F][arr[j].S]=0;
                g[arr[j].S][arr[j].F]=1;
            }
    
    queue<ll>q;
    vector<bool>vis(n+1,0);
    bool tf=1;

    for(int j=1;j<=n;j++)
        if(!vis[j])
            {
                vis[j]=1;
                q.push(j);
                while(!q.empty())
                {
                    ll curr=q.front();
                    q.pop();
                    
                    for(int ii=1;ii<=n;ii++)
                        if(g[curr][ii] && !vis[ii])
                            {
                                vis[ii]=1;
                                q.push(ii);
                            }
                        else if(vis[ii] && g[curr][ii])
                        {
                            //cout<<i<<','<<curr<<','<<ii<<'\n';
                            vector<bool>vis2(n+1,0);
                            queue<ll>q2;
                            vis2[ii]=1;
                            q2.push(ii);
                            while(!q2.empty())
                            {
                                ll curr2=q2.front();
                                q2.pop();
                                for(int jj=1;jj<=n;jj++)
                                    if(g[curr2][jj] && !vis2[jj])
                                        {
                                            vis2[jj]=1;
                                            q2.push(jj);
                                        }
                            }
                            if(vis2[curr])
                                {
                                   // cout<<curr;
                                    tf=0;
                                    break;
                                }
                        }
                    if(!tf)
                        break;
                }

                if(!tf)
                    break;
            }
    if(tf)
        ans+=cost;

    for(int j=0;j<m;j++)
        if(i&(1<<j))
            {
                g[arr[j].F][arr[j].S]=1;
                g[arr[j].S][arr[j].F]=0;
            }
        
}
cout<<ans;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...