제출 #643103

#제출 시각아이디문제언어결과실행 시간메모리
643103mahatma_muhammadRailway (BOI17_railway)C++14
0 / 100
1092 ms19020 KiB
#include <bits/stdc++.h> #include <math.h> //in the name of god,aka allah //**gray sety orz** using namespace std; #define pi pair<long long , long long> #define pii pair<long long , pair<long long , long long>> const int maxm = 5e5; const long long mod = 1e9 + 7 ; typedef long long ll; ll l,r,mid; ll n,m; ll darage[maxm] , ss , mm; queue<int> q; bool vis[maxm]; ll pedaret[maxm]; set<string> st; ll rp[maxm]; map<string,ll> mp; inline void bfs(){ mid = 0; while(q.size()){ l = q.front(); q.pop(); mid++; vis[l]=1; if(!vis[pedaret[l]]){ if(!vis[pedaret[pedaret[l]]]&&darage[pedaret[pedaret[l]]]-1==0) q.push(pedaret[pedaret[l]]); vis[pedaret[l]]=1; } } return; } int pe(string s){ if(st.find(s)==st.end()) mp.insert({s,mp.size()}) , st.insert(s); return mp[s]; } int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); cin>>n; if(n%2) return cout<<-1,0; for(int i = 0; i<n; i++){ string s,t; cin>>s>>t; l=pe(s); r=pe(t); pedaret[l]=r; darage[r]++; } for(int i=0; i<n; i++){ if(pedaret[pedaret[i]]==i && pedaret[i]!=i){ vis[i]=1,vis[pedaret[i]]=1; } } for(int i=0; i<n; i++) { if(!vis[i] && darage[i]==0) q.push(i); } bfs(); for(int i=0; i<n; i++){ if(!vis[i]){ r=1; ss=pedaret[i]; while (ss!=i) r++ , ss=pedaret[ss]; mid+=(r+1)/2; } } cout<<mid; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...