1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
#include <iostream>
#include "message.h"
#include <vector>
#include "skup.h"


void sortowanie( int tab[100000], int left, int right )
{
    int i = left;
    int j = right;
    int x = tab[( left + right ) / 2 ];
    do
    {
        while( tab[ i ] < x )
             i++;
        
        while( tab[ j ] > x )
             j--;
        
        if( i <= j ){
        	int pom=tab[i];
            tab[i]=tab[j];
            tab[j]=tab[i];
            i++;
            j--;
        }
    } while( i <= j );
    if( left < j ) sortowanie( tab, left, j );
    if( right > i ) sortowanie( tab, i, right );
    
}

using namespace std;
int main() {
	vector < int > panstwa;
	vector < int > firmy;
	int NON=NumberOfNodes();
	int MNI=MyNodeId();
	if (MNI<NON){
	panstwa.push_back(MNI);
	firmy.push_back(MNI);
	firmy.push_back(NumberOfCompanies());
	for (int i=0;i<NumberOfCompanies();i++){
		firmy.push_back(GetShareCost(i));
	}
	if ((MNI-1)>=0){
		int i=MNI-1;
		Receive(i);
		int ilosc_panstw=GetInt(i);
			for(int k=0;k<ilosc_panstw;k++){
				int nr_panstwa=GetInt(i);
				int nalezy=0;
				for (int l=0;l<panstwa.size();l++){
					if(panstwa[l]==nr_panstwa) {
						nalezy=0;
						break;
					}
				}
				if (nalezy==0){
					panstwa.push_back(nr_panstwa);
					firmy.push_back(nr_panstwa);
					int ilosc_firm=GetInt(i);
					firmy.push_back(ilosc_firm);
					for(int j=0;j<ilosc_firm;j++){
						firmy.push_back(GetInt(i));	
					}
				}
				else{
					int ilosc_firm=GetInt(i);
					for(int j=0;j<ilosc_firm;j++){
						int x;
						x=GetInt(i);	
					}
				}
			}
			if (panstwa.size()==NON){
				int T[100000];
				int k=0;
				int kv=0;
				for (int i=0;i<panstwa.size();i++){
					kv++;
					int firmykv=firmy[kv];
					kv++;
					for(int j=0;j<firmykv;j++){
						T[k]=panstwa[kv];
						k++;kv++;
					}
				}
				k;
				sortowanie(T,0,k);
				long long suma=0;
				for(int i=0;i<k;i++){
					suma+=(k-i)*T[i];
				}
				cout<<suma;
			}
	
		
	if (MNI+1<NON){
		int i=MNI+1;
		PutInt(i,panstwa.size());
		for (int j=0;j<firmy.size();j++){
			PutInt(i,firmy[j]);
		}
		Send(i);
	}
	
}
}
	return 0;
}