離散題目11(判雙射函數)

離散題目11
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
Problem Description

給定一個數學函數寫一個程序來確定該函數是否是雙射的
Input

多組輸入。 第一行輸入三個整數n,m,k,分別表示集合a中的元素個數,集合b中的元素個數,集合a到b的映射個數。 第二行輸入n個數,代表集合a中的元素。 第三行輸入m個數,代表集合b中的元素。接下來k行,每行兩個數,代表集合a中的元素x和x在集合b中的像y。
Output

每組數據輸出一行,若F爲a到b的雙射,輸出”YES”, 否則輸出”NO”。
Example Input

5 5 5
1 2 3 7 8
2 5 6 9 0
1 9
3 2
2 6
7 0
8 5
Example Output

YES
Hint

保證集合a中元素無重複,集合b中元素無重複,映射關係無重複(如:{,})
1<=n,m,k<=1000
1<=a[i], b[i]<=10000
x∈a, y∈b
題解(題目9,10,11,12爲同一思路)

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int a[1000000],b[100000];
int main()
{
    int i,j,k,n,m,f,x,y;
    while(~scanf("%d%d%d",&n,&m,&k))
    {
        f=1;
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        for(i=0;i<n;i++)
        {

            scanf("%d",&x);
            a[x]=1;
        }
        for(i=0;i<m;i++)
        {
            scanf("%d",&x);
            b[x]=1;
        }
        for(i=0;i<k;i++)
        {
            scanf("%d%d",&x,&y);
            if(a[x]==1&&b[y]==1)
            {
                a[x]=a[x]+1;
                b[y]=b[y]+1;
            }
        }
        for(i=0;i<100000;i++)
            if(a[i]==1||b[i]==1)
        {
            f=0;
            break;
        }
        else
            continue;

        if(f)
            printf("YES\n");
        else
            printf("NO\n");

    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章