離散題目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;
}