#include<iostream>
using namespace std;
const int MAXN=100010;
bool a[MAXN]= {false};
int main() {
int n,k;
cin>>n>>k;
a[0]=true;
int sum=0,tag1,tag2;
for(int i=0; i<k; i=++) {
cin>>tag1>>tag2;
if(a[tag2]==false)
sum++;
a[tag1]=true;
}
cout<<sum;
return 0;
}
常见错误思路:定义一个数组,偶数时设标志为True,奇数且为False时记录加一。问题所在,每个初始化为一组,只有当一组结束时才能赋真值。
以下为错误代码(只能运行部分样例):
#include<iostream>
using namespace std;
const int MAXN=100010;
bool a[MAXN]= {false};
int main() {
int n,k;
cin>>n>>k;
a[0]=true;
int sum=0,tag;
for(int i=0; i<2*k; i=i+1) {
cin>>tag;
if(i%2==0) {
a[tag]=true;
}
if(i%2==1&&a[tag]==false) {
sum++;
}
}
cout<<sum;
return 0;
}