这两天在看背包九讲,抽空作了这个题,起初写了一个程序,没有检测循环的状况,即有些控制关系须要利用后来求出的控制关系得出。ios
ans[i][j]表示输入数据,i控制j的份额。bns[i][j]表示循环计算后的结果,use[i][j]来表示在某次循环中是否已经使用过这个控制关系。spa
/* ID:jzzlee1 PROB:concom LANG:C++ */ //#include <iostream> #include<fstream> using namespace std; ifstream cin("concom.in"); ofstream cout("concom.out"); const int len=101; int ans[len][len],bns[len][len],use[len][len]; int main() { int a,i,j,q,k,n; cin>>n; for(a=1;a<=n;++a) { cin>>i>>j>>q; ans[i][j]=bns[i][j]=q; } bool flag=1; while(flag) { flag=0; for(i=1;i!=len;++i) { for(j=1;j!=len;++j) { if(j==i) continue; if(bns[i][j]>50&&!use[i][j]) { use[i][j]=1; for(k=1;k!=len;++k) { if(k==i&&k==j) continue; if(ans[j][k]) bns[i][k]+=ans[j][k]; flag=1; } } } } } for(i=1;i!=len;++i) for(j=1;j!=len;++j) if(i!=j&&bns[i][j]>50 ) cout<<i<<" "<<j<<endl; return 0; }