public double describe(GameState state, Player player)
	{
		Map<Player, Integer> largestClusterSize = new HashMap<Player, Integer>();
		
		Set<Country> countedCountries = new HashSet<Country>();

		for (Country country : state.getCountries())
		{
			if (countedCountries.contains(country))
				continue;

			int clusterSize = Util.countCluster(country, countedCountries);

			if (largestClusterSize.containsKey(country.getPlayer()))
			{
				if(largestClusterSize.get(country.getPlayer()) < clusterSize)
					largestClusterSize.put(country.getPlayer(), clusterSize);
			}
			else
			{
					largestClusterSize.put(country.getPlayer(), clusterSize);
			}
		}
		
		if ( !largestClusterSize.containsKey(player) )
			return -1;		
		
		int playerCount = 0;
		while(largestClusterSize.size() < state.getNumberOfPlayers())
			largestClusterSize.put(new RandomPlayer("empty"+playerCount++), 0);
		
		int sum = 0;
		for(Integer clusterSize : largestClusterSize.values())
		{
			sum += clusterSize;
		}
		sum -= largestClusterSize.get(player);
		if (sum == 0)
			return 1;
		//double mean = (double)sum / (largestClusterSize.size() - 1);
		
		double ratio = (double)(largestClusterSize.get(player)) / (double)sum;

		// ratio capped at 2. If you have more than twice as large a cluster as all other players combined, you reach max value
		if(ratio > 2)
			ratio = 2;
		
		return normalize(ratio, 0, 2);
	}