SDU省賽選拔-ACM ICPC 2010–2011, NEERC, Northern Subregional Contest

A. Alien Communication Masterclass

【題目】

給定序列A、B,構造一個等式,使得對於任意的A[i]進制都滿足,對於任意的B[i]都
不滿足

【分析i】

同一個式子,不同進制的結果如果不相同,一般是在進位上,首先我們可以想到如

果對於A序列的進制都滿足呢,可以寫成x1 * x2 * x3 *x4 = 0這種,每種進制可以構

造一個等於0的式子,對於A[i],可以構造(10 - 1 - 1 - 1…. - 1)共減去a[i]個1

B .Flowery Trails

【問題】

給定一無向圖,詢問由s至t的所有最短路徑的邊的並

【分析】

從s開始跑一遍最短路,從t開始跑一遍最短路,然後一次枚舉每條邊,判斷是否是最

短路徑上的邊

C. Commuting Functions

【問題】

已知兩函數f、g滿足f[g[x]] = g[f[x]],函數f的定義域、值域都爲1~n的整數,且f爲雙

射函數,詢問函數g的值(字典序儘可能的小)

【分析】

顯然f的值域是由若干循環節組成的,對於一個循環節來說,g中對應位置也爲循環

節,且只要此循環節的一個數值確定,那麼整個循環節便確定下來了,爲了保證字

典序儘可能的小,我們應該讓此循環節的最靠左的位置對應的數儘可能的小。

首先,對於f的一個長度爲k的循環節,假如之前沒有出現過長度爲k的因子的循環

節,那麼對於此 ,g[i]= i是顯然可行的一個方案,並且是字典序最小的方案,那麼

長度爲2* k也可以使用此方案,3* k也可以使用此方案。

因此對於f的每個值,判斷他的循環節長度k,找出最靠左的位置應該填充的數值,依

次填取即可

D.Book Club

【題目】
給定一有向圖,詢問是否存在若干環,使得這些環把每個頂點包含一次,其實說白

了就是二分圖最大匹配

【分析】

直接用匈牙利算法搞一下就可以了,說一下匈牙利的原理吧,對於每個小哥哥,都

會儘可能的找到一個小姐姐與之對應,如果給某個小哥哥A找的過程中,發現他想找

的小姐姐A已經被小哥哥B搶了,這時候判斷一下能否給小哥哥B換一個小姐姐,這

樣豈不是兩全其美,判斷的時候對小姐姐A做一個標記,發表已經試圖從小姐姐A這

騰一個位置,這樣以後就不需要再次在小姐姐A上考慮了

#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;

const int N = 10000 + 500;

vector<int > s[N];
int tmp[N];
bool f[N];

bool dfs(int x)
{
    for(int i = 0; i < s[x].size(); i++)
    {
        int y = s[x][i];
        if (!f[y])
        {
            f[y] = true;
            if (tmp[y] == -1 || dfs(tmp[y]))
            {
                tmp[y] = x;
                return 1;
            }
        }
    }
    return 0;
}
int main()
{
    int n, m;
    scanf("%d%d", &n, &m);
    for(int i = 0; i < m; i++)
    {
        int x, y;
        scanf("%d%d", &x, &y);
        s[x].push_back(y);
    }
    memset(tmp, -1, sizeof(tmp));
    for(int i = 0; i < n; i++)
    {
        memset(f, 0, sizeof(f));
        dfs(i);
    }
    bool delta = true;
    for(int i = 0; i < n; i++)
        if(tmp[i] == -1)
    {
        delta = false;
        break;
    }
    if (delta)
        printf("YES\n"); else
          printf("NO\n");
    return 0;
}
發佈了47 篇原創文章 · 獲贊 26 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章