2017-9-20
题目描述
输出A控制B的序列
解答
自己写的很智障
代码
/*
ID: 18795871
PROG: concom
LANG: C++
*/
#include<iostream>
#include<cstring>
#include<fstream>
using namespace std;
const int N = 100;
ifstream fin("concom.in");
ofstream fout("concom.out");
int x[N+1][N+1];
bool f[N+1][N+1];
int m;
void res(int a,int b){
int i,sum=0;
for (i=1;i<=m;i++){
if (f[a][i]){
sum+=x[i][b];
}
}
if (sum>=50){
f[a][b]=true;
}
}
void show(){
int i,j;
for (i=1;i<=m;i++){
for (j=1;j<=m;j++){
if (i!=j&&f[i][j]){ //i控制j
fout<<i<<" "<<j<<endl;
}
}
}
}
int cal(){
int sum=0;
for (int i=1;i<=m;i++){
for (int j=1;j<=m;j++){
if (f[i][j]) sum++;
}
}
return sum;
}
int main(){
int n,a,b,c,i,j,s=0;
fin>>n;
memset(x,0,sizeof(x));
memset(f,false,sizeof(f));
m=0;
for (i=0;i<n;i++){
fin>>a>>b>>c;
m=max(m,a);
m=max(m,b);
x[a][b]=c;
if (c>=50) {
f[a][b]=true;
}
}
for (i=1;i<=m;i++) f[i][i]=true; //自己控制自己
while(1){
for (i=1;i<=m;i++){
for (j=1;j<=m;j++){
if (f[i][j]) continue;
else res(i,j);
}
}
if (s==cal()) break;
else s=cal();
}
show();
return 0;
}