zoukankan      html  css  js  c++  java
  • POJ 3270 Cow Sorting(置换群)

    题目链接

    很早之前就看过这题,思路题把,确实挺难想的,黑书248页有讲解。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 #include <cmath>
     5 #include <algorithm>
     6 using namespace std;
     7 int p[10001];
     8 struct node
     9 {
    10     int id;
    11     int x;
    12     int pos;
    13 }num[10001];
    14 int flag[10001],minz;
    15 int cmp1(node a,node b)
    16 {
    17     return a.x < b.x;
    18 }
    19 int cmp2(node a,node b)
    20 {
    21     return a.id < b.id;
    22 }
    23 int judge(int x)
    24 {
    25     int res = 0,m,temp = 0;
    26     if(x == num[x].pos)
    27     {
    28         flag[x] = 1;
    29         return 0;
    30     }
    31     m = num[x].x;
    32     while(!flag[x])
    33     {
    34         flag[x] = 1;
    35         temp += num[x].x;
    36         x = num[x].pos;
    37         m = min(m,num[x].x);
    38         res ++;
    39     }
    40     return temp + min((res-2)*m,m+(res+1)*minz);
    41 }
    42 int main()
    43 {
    44     int n,i,sum;
    45     scanf("%d",&n);
    46     minz = 100000000;
    47     sum = 0;
    48     for(i = 1;i <= n;i ++)
    49     {
    50         scanf("%d",&num[i].x);
    51         minz = min(num[i].x,minz);
    52         num[i].id = i;
    53     }
    54     sort(num+1,num+n+1,cmp1);
    55     for(i = 1;i <= n;i ++)
    56     {
    57         num[i].pos = i;
    58     }
    59     sort(num+1,num+n+1,cmp2);
    60     for(i = 1;i <= n;i ++)
    61     {
    62         if(!flag[i])
    63         {
    64             sum += judge(i);
    65         }
    66     }
    67     printf("%d
    ",sum);
    68     return 0;
    69 }
  • 相关阅读:
    【简】题解 AWSL090429 【市场】
    【简】题解 AWSL090429 【噪音】
    差分约束
    凸包模板
    杂模板
    后缀数组刷题
    Trie刷题
    字符串模板
    网络流建模专题
    组合数模板
  • 原文地址:https://www.cnblogs.com/naix-x/p/3205589.html
Copyright © 2011-2022 走看看