根据当前【股份关系】更新【所属关系】
无更新:
算法结束
有更新:
再由最新的【所属关系】维护新的【股份关系】
重回第一步
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <string.h>
//#define LOCAL
using namespace std;
#ifdef LOCAL
ofstream fout ("out.txt");
ifstream fin ("in.txt");
#else
ofstream fout ("concom.out");
ifstream fin ("concom.in");
#endif
int fee[110][110];
int used[110][110];
int beg[110];
int en[110];
int link[110][110];
int main() {
int num_link;
fin>>num_link;
for (int i = 0; i < num_link; ++i)
{
int temp1, temp2, temp;
fin>>temp1>>temp2>>temp;
fee[temp1][temp2] = temp;
}
while(1)
{
int update = 0;
for (int i = 1; i <= 100; ++i)
{
for (int j = 1; j <= 100; ++j)
{
if(used[i][j]==0 && fee[i][j] > 50 && i!=j)
{
link[i][en[i]++] = j;
used[i][j] = 1;
update = 1;
}
}
}
if(!update)
break;
for (int i = 1; i <= 100; ++i)
{
for (int j = beg[i]; j < en[i]; ++j)
{
for (int k = 1; k <= 100; ++k)
{
if(used[i][k]==0)
{
fee[i][k] += fee[link[i][j]][k];
}
}
}
beg[i] = en[i];
}
}
for (int i = 1; i <= 100; ++i)
{
sort(link[i], link[i] + en[i]);
for (int j = 0; j < en[i]; ++j)
{
fout<<i<<' '<<link[i][j]<<endl;
}
}
return 0;
}