分析:其实题目中给出了三个条件:1.自己可以控制自己的公司2.公司A拥有大于50%的公司B的股票3.公司A控制K(K >= 1)个公司,记为C1, ..., CK,每个公司Ci拥有xi%的公司B的股票,并且x1+ .... + xK > 50%。所以就设法编程满足这三个条件就好了。
源代码:
/*
ID: supersnow0622
PROG: test
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
#include<memory.h>
using namespace std;
int have[101][101];
int control[101][101];
int main() {
ofstream fout ("test.out");
ifstream fin ("test.in");
int N,i,j,p,num;
cin>>N;
memset(control,0,sizeof(control));
for(int a=0;a<101;a++)
control[a][a]=1;
for(int a=0;a<N;a++)
{
cin>>i>>j>>p;
have[i][j]=p;
if(p>50)
control[i][j]=true;
}
bool judge=true;
while(judge)
{
judge=false;
for(int a=1;a<101;a++)
for(int b=1;b<101;b++)
{
if(!control[a][b])//在不知道a是否能控制b的情况下
{
num=0;
for(int c=1;c<101;c++)//累加通过a控制多个c从而使a拥有的b的股份达到50以上
if(b!=c&&control[a][c])
num+=have[c][b];
if(num>50)
{
control[a][b]=true;
judge=true;
}
}
}
}
for(int a=1;a<101;a++)
for(int b=1;b<101;b++)
{
if(control[a][b]&&a!=b)
cout<<a<<" "<<b<<endl;
}
return 0;
}