zoukankan      html  css  js  c++  java
  • Similar Arrays CodeForces

    Similar Arrays

    题意:

    题目要构造两个序列

    A序列每个数字都不相同,B序列只有两个相同的数字

    给M组关系 i ,j表示 ai > aj 或者 ai < aj

    同时B序列有这个和A序列一样的关系 如果 ai > aj 就有 bi > bj

    思路:

    首先考虑不能构造的情况 ,如果A序列中任意一对数字都存在关系,那么B序列中不可能由两个相同的数字

    即 m >= (n - 1) * n / 2

    如果 m < (n - 1) * n / 2 ,找两个没有关系的点,A序列赋值为n 和 n - 1 ,  B序列赋值为 n 和 n 

    剩下的A、B序列都一样就好了

      1 #include<cstdio>
      2 #include<string.h>
      3 #include<algorithm>
      4 #include<cmath>
      5 #include<iostream>
      6 #include<vector>
      7 #include<queue>
      8 #include<set>
      9 #include<map>
     10 #include<cctype>
     11 #define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
     12 #define mem(a,x) memset(a,x,sizeof(a))
     13 #define lson rt<<1,l,mid
     14 #define rson rt<<1|1,mid + 1,r
     15 #define P pair<int,int>
     16 #define ull unsigned long long
     17 using namespace std;
     18 typedef long long ll;
     19 const int maxn = 2e5 + 10;
     20 const ll mod = 998244353;
     21 const int inf = 0x3f3f3f3f;
     22 const long long INF = 0x3f3f3f3f3f3f3f3f;
     23 const double eps = 1e-7;
     24 inline ll read()
     25 {
     26     ll X = 0, w = 0; char ch = 0;
     27     while (!isdigit(ch)) { w |= ch == '-'; ch = getchar(); }
     28     while (isdigit(ch)) X = (X << 3) + (X << 1) + (ch ^ 48), ch = getchar();
     29     return w ? -X : X;
     30 }
     31 ll n, m , a , b;
     32 vector<int>vec[maxn], v;
     33 ll cnt[maxn], arr1[maxn] , arr2[maxn] , cnt1[maxn];
     34 
     35 
     36 
     37 int main()
     38 {
     39     n = read(), m = read();
     40     for (int i = 1; i <= m; ++i)
     41     {
     42         int u = read(), v = read();
     43         vec[u].push_back(v);
     44         vec[v].push_back(u);
     45     }
     46     if (2 * m >= n * (n - 1))
     47     {
     48         cout << "NO" << endl;
     49         return 0;
     50     }
     51     int anspos;
     52     for (int i = 1; i <= n; ++i)
     53     {
     54         if (vec[i].size() == n - 1) continue;
     55         else
     56         {
     57             anspos = i;
     58             for (int j = 0; j < vec[i].size(); ++j) cnt[vec[i][j]] = 1;
     59             break;
     60         }
     61     }
     62     for (int i = 1; i <= n; ++i)
     63     {
     64         if (cnt[i] == 0 && i != anspos)
     65         {
     66             arr2[anspos] = arr2[i] = n;
     67             arr1[anspos] = n, arr1[i] = n - 1;
     68             break;
     69         }
     70     }
     71     int res = 0;
     72     for (int i = 1; i <= n; ++i)
     73     {
     74         if (arr1[i] == 0) arr1[i] = ++res;
     75     }
     76     res = 0;
     77     for (int i = 1; i <= n; ++i)
     78     {
     79         if (arr2[i] == 0) arr2[i] = ++res;
     80     }
     81     cout << "YES" << endl;
     82     for (int i = 1; i <= n; ++i)
     83     {
     84         cout << arr1[i];
     85         if (i == n) cout << endl;
     86         else cout << " ";
     87     }
     88     for (int i = 1; i <= n; ++i)
     89     {
     90         cout << arr2[i];
     91         if (i == n) cout << endl;
     92         cout << " ";
     93     }
     94 
     95 }
     96 
     97 
     98 /*
     99 4 5
    100 11 12 13 14 15
    101 0 4 10 15 20
    102 2 10 30 32 40
    103 20 21 22 23 24
    104 */
    AC代码
  • 相关阅读:
    python的ORM框架SQLAlchemy
    SQLAlchemy技术文档(中文版)-下
    SQLAlchemy技术文档(中文版)-上
    python的class的__str__和__repr__(转)
    虚拟化技术之KVM
    cobbler部署安装
    pxe+kickstart 无人值守安装CentOS7.1
    超详细saltstack安装部署及应用
    页面缓存
    db2 常用命令
  • 原文地址:https://www.cnblogs.com/DreamACMer/p/12707644.html
Copyright © 2011-2022 走看看