HDU2924 Think I’ll Buy Me a Football Team

  这道题目很有意思,要求简化债务关系。一开始感觉很复杂,稍加分析后发现其实就是简化这个图,让这个图每个点出度为0或者入度为0,也就是说让欠账的人直接掏钱给差钱的人就行了。所以只要读一遍数据,看一下欠钱的一共欠了多少就可以了。

 1 #include<cstdio>
 2 #include<string.h>
 3 using namespace std;
 4 int cas = 1, n, deg[1005];
 5 int main()
 6 {
 7     while(scanf("%d", &n), n)
 8     {
 9         int ans0 = 0, ans1 = 0;
10         memset(deg, 0, n * 4);
11         for(int i = 0; i < n; i++)
12         {
13             for(int j = 0, x; j < n; j++)
14             {
15                 scanf("%d", &x);
16                 deg[i] -= x;
17                 deg[j] += x;
18                 ans0 += x;
19             }
20         }
21         for(int i = 0; i < n; i++)
22         {
23             if(deg[i] > 0)ans1 += deg[i];
24         }
25         printf("%d. %d %d\n", cas++, ans0, ans1);
26     }
27     return 0;
28 }
posted @ 2012-08-01 01:26  Burn_E  阅读(252)  评论(0编辑  收藏  举报