题目
过程
第一次提交
采用两个数组分别记录左值和右值,每输入一条赋值语句在左值数组中寻找右值是否出现过。但两层循环时间复杂度高,运行超时。
#include<bits/stdc++.h>
using namespace std;
const int N=100001;
int n,k;
int x[N],y[N];
int main()
{
cin>>n>>k;
y[0]=0;
int sum=0;
int result=0;
for(int i=0;i<k;i++)
{
cin>>x[i]>>y[i];
for(int j=0;j<i;j++)
{
if((x[j]==y[i])||(y[i]==0) )
{
//cout<<x[i]<<"已赋值 "<<y[i]<<endl;
sum++;
break;
}
}
}
result=k-sum;
cout<<result;
return 0;
}
第二次提交
采用一个数组记录已赋值的变量。
#include<bits/stdc++.h>
using namespace std;
const int N=100001;
int n,k;
int a[N];
int main()
{
cin>>n>>k;
int sum=0;
a[0]=1;
for(int i=0;i<k;i++)
{
int x,y;
cin>>x>>y;
if((!a[y])&&(y!=0) )
{
sum++;
}
a[x]=1;
}
cout<<sum;
return 0;
}