注意:形如① x = y; ② y = x; 虽然①非法(y是变量且没有初值),但是我们仍然将x视为已经赋予初值了,也就是说在这个例子中,②是合法的语句
本题思路:输入x[i], y[i],枚举每一个y[i],如果y[i]是0,或者y[i]在之前的语句中的x[i]的位置出现过,则是合法语句,否则(即对应y[i] != 0 且 y[i]在之前的语句中的x[i]的位置没有出现过)是非法语句。
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 100010;
int x[N], y[N], flag[N];
int n, k;
int main()
{
scanf("%d%d", &n, &k);
for (int i = 0; i < k; ++ i)
scanf("%d%d", &x[i], &y[i]);
int res = 0;
for (int i = 0; i < k; i ++)
{
if (y[i] != 0 && flag[y[i]] == 0) res ++;
flag[x[i]] ++;
}
printf("%d\n", res);
return 0;
}