Monday, April 25, 2016

UVa 11749 - Poor Trade Advisor

// UVa 11749 - Poor Trade Advisor

#include <iostream>
#include <vector>
#include <string.h>
#include <stdio.h>
#include <limits.h>

using namespace std;

#define longint signed long long

bool yet[501];
int lnk[501][501];
int c;

void dfs(int i) {
	c++;
	yet[i] = false;
	for (int j = 1; j <= lnk[i][0]; j++)
		if (yet[lnk[i][j]])
			dfs(lnk[i][j]);
}

int main() {

	int n;
	longint m;

	cin >> n >> m;
	while (n || m) {

		int roads[250000][2];
		int roads_size = 0;
		longint greatest_ppa = LONG_MIN;

		for (; m > 0; m--) {
			int a, b;
			longint ppa;
			cin >> a >> b >> ppa;
			if (ppa == greatest_ppa) {
				roads[roads_size][0] = a;
				roads[roads_size++][1] = b;
			} else if (ppa > greatest_ppa) {
				greatest_ppa = ppa;
				roads_size = 1;
				roads[0][0] = a;
				roads[0][1] = b;
			}
		}

		for (int i = 1; i <= n; i++)
			lnk[i][0] = 0;

		for (int i = 0; i < roads_size; i++) {
			int a = roads[i][0];
			int b = roads[i][1];
			lnk[a][++lnk[a][0]] = b;
			lnk[b][++lnk[b][0]] = a;
		}

		memset(yet, true, sizeof(yet));
		int max = 1;

		for (int i = 1; i <= n; i++) {
			if (yet[i]) {
				c = 0;
				dfs(i);
				if (c > max)
					max = c;
			}
		}

		cout << max << endl;

		cin >> n >> m;
	}

	return 0;
}

No comments:

Post a Comment