USACO-Section2.3 Controlling Companies

来源:互联网 发布:linux系统装win7 编辑:程序博客网 时间:2024/06/05 05:50

2017-9-20

题目描述

输出A控制B的序列

解答

自己写的很智障

代码

/*ID: 18795871PROG: concomLANG: 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;}
原创粉丝点击