POJ 1456 Supermarket

解题思路:贪心+并查集优化

欢迎review
1 #include <iostream>
2  using namespace std;
3
4 int root[10001], pro[10001];
5 struct Prod{
6 int p, d;
7 }node[10000];
8 int cmp(const void *a, const void *b)
9 {
10 return (*(Prod*)a).p < (*(Prod*)b).p ? 1 : -1;
11 }
12 int findroot(int x)
13 {
14 if(root[x] != x)
15 root[x] = findroot(root[x]);
16 return root[x];
17 }
18 inline void Insert(Prod& cur)
19 {
20 int t, x = cur.d;
21 if(t = findroot(x))pro[t]=cur.p, root[t] = t - 1;
22 }
23 int main()
24 {
25 int n, i, ans;
26 while (scanf("%d", &n)==1)
27 {
28 for(i = 0; i < n; i++)
29 scanf("%d %d", &node[i].p, &node[i].d);
30 qsort(node, n, sizeof(Prod), cmp);
31 for(i=0; i < 10001; i++)root[i]=i, pro[i]=0;
32 for(i=0; i < n; i++) Insert(node[i]);
33 for(i=ans=0;i<10001; i++)ans+=pro[i];
34 printf("%d\n", ans);
35 }
36 return 0;
37 }

 

posted on 2010-12-06 22:24  ltang  阅读(435)  评论(0编辑  收藏  举报

导航