感觉题目还蛮简单的,题目已经说的很清楚,要求右边出现的值在左边要出现过。
思路:将左边出现的值装进set里,然后看右边的的值是否在左边出现过。
AC代码:
#include <iostream>
#include <set>
using namespace std;
int main()
{
int n,k,sum=0,num1,num2;
set<int> stl;
cin>>n>>k;
for(int i=0;i<k;i++){
cin>>num1>>num2;
if(num2!=0&&stl.count(num2)==0)
sum++;
if(stl.count(num1)==0){
stl.insert(num1);
}
}
cout<<sum<<endl;
return 0;
}
注意的点 ,还要判断是否为0
因为题目给出提示,x不等于0的,取不到
第二种快一点而且空间较小
#include<iostream>
#define N 100010
using namespace std;
bool a[N];
int main(){
int n,k,ans=0;
cin>>n>>k;
a[0]=1;
for(int i=0;i<k;i++){
int x,y;
scanf("%d %d",&x,&y);
ans+=(!a[y]);
a[x]=1;
}
cout<<ans<<endl;
return 0;
}