关于今晚CF E贪心做法的问题
  • 板块灌水区
  • 楼主Eason2009
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/7/11 00:56
  • 上次更新2023/10/27 21:09:48
查看原帖
关于今晚CF E贪心做法的问题
286448
Eason2009楼主2022/7/11 00:56

这是我赛时的贪心代码:

#include<bits/stdc++.h>
#define maxn 200005
using namespace std;
int t,n,a[maxn],b[maxn],vis1[maxn],vis2[maxn];
int main()
{
	cin>>t;
	while(t--)
	{
		memset(vis1,0,sizeof(vis1));
		memset(vis2,0,sizeof(vis2));
		bool flag=0;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i]>>b[i];
		}
		for(int i=1;i<=n;i++)
		{
			if(a[i]==b[i])
			{
				flag=1;
				break;
			}
			else if((!vis1[a[i]])&&(!vis1[b[i]])&&(vis2[a[i]]||vis2[b[i]]))
			{
				vis1[a[i]]=1;
				vis1[b[i]]=1;
			}
			else if((!vis2[a[i]])&&(!vis2[b[i]])&&(vis1[a[i]]||vis1[b[i]]))
			{
				vis2[a[i]]=1;
				vis2[b[i]]=1;
			}
			else if((vis1[a[i]]||vis1[b[i]])&&(vis2[a[i]]||vis2[b[i]]))
			{
				flag=1;
				break;
			}
			else
			{
				vis2[a[i]]=1;
				vis2[b[i]]=1;
			}
		}
		if(flag)
		{
			cout<<"No"<<endl;
		}
		else cout<<"Yes"<<endl;
	}
	return 0;
}

大概思路就是如果只有一个满足条件,就放进那一个。

如果两个都满足,就随便找一个放。

然后WA on #2,虽然运行时间挺长的。

感觉是假了,不知道有没有hack数据,求一下

然后再求一下正解做法思路

lz要去睡觉了,可能无法及时回复,请见谅

2022/7/11 00:56
加载中...