Submission #1159464

#TimeUsernameProblemLanguageResultExecution timeMemory
1159464mnbvcxz123Monthly railway pass (LMIO18_menesinis_bilietas)C++20
100 / 100
530 ms67184 KiB
#include<bits/stdc++.h> using namespace std; using ll=long long; using pi=pair<int,int>; #define fi first #define se second constexpr int N=5e5+5; int n,m; struct dsu{ int par[N]; dsu(){for(int i=0;i<N;++i)par[i]=-1;} int find(int x){ if(par[x]<0)return x; return par[x]=find(par[x]); } bool unite(int a, int b){ a=find(a); b=find(b); if(a==b)return 0; if(par[a]>par[b])swap(a,b); assert(par[a]<0 and par[b]<0); par[a]+=par[b]; par[b]=a; return 1; } int sz(int x){return -par[find(x)];} bool same(int a, int b){return find(a)==find(b);} }; set<int>g[N]; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin>>n>>m; dsu p; vector<pi>edg; while(m--){ int a,b; char c; cin>>a>>b>>c; if(c=='T')p.unite(a,b); else edg.push_back({a,b}); } for(auto[a,b]:edg){ if(p.same(a,b))continue; g[p.find(a)].insert(p.find(b)); g[p.find(b)].insert(p.find(a)); } int ret=0; for(int i=1;i<=n;++i){ if(i!=p.find(i))continue; int c=p.sz(i); for(const int&j:g[i])c+=p.sz(j); ret+=(c==n)*p.sz(i); } cout<<ret<<'\n'; }
#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...