样例过不去
查看原帖
样例过不去
349906
封禁用户楼主2021/6/14 14:27
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
int n, m,ans=-1;
string s[20];
map<string, vector<string>> nt;
vector<int> ans2;
bool cmp(string a, string b)
{
	return a < b;
}
void check(int k)
{
	vector<int> a;
	for (int i = 0; i <n; i++)
	{
		if (k >> i & 1)a.push_back(i);
	}
	int o = a.size();
	for (int i = 0; i < o; i++)
	{
		for (int j = i+1; j < o; j++)
		{
			for (int k = 0; k < nt[s[i]].size(); k++)
			{
				for (int l = 0; l < nt[s[j]].size(); l++)
				{
					if (nt[s[i]][k] == nt[s[j]][l])return;
				}
			}
				
		}
	}
	if (ans < o)
	{
		ans2.clear();
		ans = o;
		for (int i = 0; i < ans; i++)
		{
			ans2.push_back(a[i]);
		}
		return;
	}
	return;
}
int main()
{
	cin >> n;
	cin >> m;
	for (int i = 0; i < n; i++)
	{
		cin >> s[i];
		nt[s[i]].push_back("");
	}
	for (int i = 0; i < m; i++)
	{
		string t1, t2;
		cin >> t1 >> t2;
		nt[t1].push_back(t2);
		nt[t2].push_back(t1);
	}
	for (int i = 0; i < 1<<n; i++)
	{
		check(i);
	}
	cout << ans << endl;
	vector<string> str;
	for (int i = 0; i < ans; i++)
	{
		str.push_back(s[ans2[i]]);
	}
	sort(str.begin(), str.end(), cmp);
	for (int i = 0; i < ans; i++)
	{
		cout << str[i] << endl;
	}
}

为什么样例过不去QAQ?

2021/6/14 14:27
加载中...