zoukankan      html  css  js  c++  java
  • UVA11330 Andy's Shoes —— 置换分解

    题目链接:https://vjudge.net/problem/UVA-11330

    题意:

    给出n双鞋子,鞋子按左右左右地摆放,但“左右”是否为一对鞋子是不确定的。问:至少交换多少次鞋子,才能把每双鞋子都放好。

    题解:

    1.可知,对于“左”鞋子是不需要调整的,只需调整“右”鞋子,使得它们都各自放到了相应“左”鞋子的右边。

    2.因此,可以把右鞋子的摆放情况看成是置换。然后对置换进行分解,求出循环节cnt,则只需交换n-cnt次。

    代码如下:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <vector>
     6 #include <cmath>
     7 #include <queue>
     8 #include <stack>
     9 #include <map>
    10 #include <string>
    11 #include <set>
    12 using namespace std;
    13 typedef long long LL;
    14 const int INF = 2e9;
    15 const LL LNF = 9e18;
    16 const int MOD = 1e9+7;
    17 const int MAXN = 2e4+10;
    18 
    19 bool vis[MAXN];
    20 int A[MAXN];
    21 int main()
    22 {
    23     int T, kase = 0, n;
    24     scanf("%d", &T);
    25     while(T--)
    26     {
    27         scanf("%d",&n);
    28         memset(vis, true, sizeof(vis));
    29         for(int i = 1; i<=n; i++)
    30         {
    31             int l, r;
    32             scanf("%d%d", &l,&r);
    33             A[l] = r;
    34             vis[l] = false;
    35         }
    36 
    37         int cnt = 0;
    38         for(int i = 1; i<MAXN; i++)
    39         {
    40             if(!vis[i])
    41             {
    42                 int j = i;
    43                 cnt++;
    44                 do
    45                 {
    46                     vis[j] = true;
    47                     j = A[j];
    48                 }while(j!=i);
    49             }
    50         }
    51         printf("%d
    ", n-cnt);
    52     }
    53 }
    View Code
  • 相关阅读:
    windows cluster 心跳检测阀值优化
    添加普通用户为sudoer
    每日备份脚本目录shell
    linux基础配置
    表变量 临时表 使用场景
    mysql分组排序row_number() over(partition by)
    replication_较少延迟时间
    SQL Server 参数化 PARAMETERIZATION
    thinkPHP RBAC模块
    thinkPHP 微信sdk
  • 原文地址:https://www.cnblogs.com/DOLFAMINGO/p/8538759.html
Copyright © 2011-2022 走看看