这道题花了比较大的精力,我是用循环写的,这就需要在最外面套一个大循环,知道循环内什么都不做,才退出大循环。然后就是需要将遍历公司的二维矩阵,将子公司拥有的股份加到母公司上去最后进行判断。代码如下。
#include<bits/stdc++.h>
using namespace std;
int N=0,cu[105][105],cx[105][105];
int main (){
freopen ("concom.in","r",stdin);
freopen ("concom.out","w",stdout);
int i=0,j=0,k=0,p=0;
cin>>N;
for (k=1;k<=N;k++){
cin>>i>>j>>p;
cu[i][j]=p;
if (p>50){
cx[i][j]=1;
}
}
bool flag;
for(int i=1;i<=100;i++){
flag=true;
cx[i][i]=1;
while(flag){
flag=false;
for(int j=1;j<=100;j++){
if(!cx[i][j]){
int temp=0;
for(int k=1;k<=100;k++){
if(cx[i][k]){
temp+=cu[k][j];
}
}
if(temp>50){
cx[i][j]++;
flag=true;
}
}
}
}
}
for (i=1;i<=100;i++){
for (j=1;j<=100;j++){
if (cx[i][j]&&i!=j){
cout<<i<<" "<<j<<endl;
}
}
}
return 0;
}