USACO 2.3 Controlling Companies (concom)

//Main Idea:
//brute force;
//shares[i][j] is the initial shares company i own for company j;
//fianl_shares[i][j] is the shares company i own for j after calculate;
//used[i][j] == 1 denote i control j to avoid repeated computation;

/*
ID: haolink1
PROG: concom
LANG: C++
*/

//#include <iostream>
#include <fstream>

using namespace std;

const int com = 100;
short shares[com][com],final_shares[com][com];
bool  used[com][com];

int main(){
    ifstream fin("concom.in");
    int num = 0;
    fin >> num;
    int com_1 = 0; int com_2 = 0;
    for(int i = 0; i < num ; i++){
        fin >> com_1 >> com_2;
        fin >> shares[com_1-1][com_2-1];
        final_shares[com_1-1][com_2-1] = shares[com_1-1][com_2-1];
    }
    
    bool flag = 1;
    while(flag){
        flag = 0;
        for(int i = 0; i < com; i++){
            for(int j = 0; j < com; j++){
                if(used[i][j] == 0 && final_shares[i][j] > 50 && i != j){
                    //used[i][j] = used[j][i] = 1;
                    used[i][j] = 1;
                    flag = 1;
                    for(int k = 0; k < com; k++){
                        if(k != i && k != j)// now company i got company k's share that j own;
                            final_shares[i][k] += shares[j][k];
                    }
                }
            }
        }
    }
    flag = 1;
    ofstream fout("concom.out");
    for(int i = 0; i < com; i++){
        for(int j = 0; j < com; j++){
            if(final_shares[i][j] > 50 && i != j){
                fout<< i+1 <<" "<< j+1 << endl;
                flag = 0;
            }
        }
    }
    if(flag)
        fout << 0 << endl;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值