Submission #920975

#TimeUsernameProblemLanguageResultExecution timeMemory
920975WongYiKaiMonthly railway pass (LMIO18_menesinis_bilietas)C++14
100 / 100
401 ms114360 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll visited[600000];
ll type[600000];
ll c=1;
ll sets[600000];

vector<ll> adj[600000],adj2[600000];

void dfs(ll vertex){
	visited[vertex] = 1;
	type[vertex] = c;
	sets[c]++;
	for (auto item:adj[vertex]){
		if (visited[item]==0){
			dfs(item);
		}
	}
}
int main(){
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	ll n,m;
	cin >> n >> m;
	for (int i=0;i<m;i++){
		ll a,b;
		char t;
		cin >> a >> b >> t;
		if (t=='T'){
			adj[a].push_back(b);
			adj[b].push_back(a);
		}
		else {
			adj2[a].push_back(b);
			adj2[b].push_back(a);
		}
	}
	for (int i=1;i<=n;i++){
		if (visited[i]==0){
			dfs(i);
			c++;
		}
	}
	set<ll> con[c+5];
	for (int i=1;i<=n;i++){
		for (auto item:adj2[i]){
			if (type[i]!=type[item]){
				con[type[i]].insert(type[item]);
			}
		}
	}
	c--;
	ll total=0;
	for (int i=1;i<=c;i++){
		//cout << con[i].size() << "\n";
		ll len = con[i].size();
		if (len == c-1) total += sets[i];
	}
	cout << total;
}
#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...