思路:
原来string类能sort 和 swap....太强了....
注意:字典序最小输出,因为某个地方写挫了,sort了n发,代码挫。
#include <bits/stdc++.h> using namespace std; typedef long long LL; int tol; map<string,int>id; map<int,string>xs; string ss[20],sss[20]; bool ma[20][20]; int main() { string t; string s; int n,kk; id.clear(); xs.clear(); tol=0; cin>>n>>kk; for(int i=0; i<n; i++) cin>>sss[i]; sort(sss,sss+n); for(int i=0;i<n;i++) { id[sss[i]]=i; xs[i]=sss[i]; } memset(ma,false,sizeof(ma)); while(kk--) { cin>>s>>t; ma[id[s]][id[t]]=ma[id[t]][id[s]]=true; } vector<int> k,res; int ans=0; for(int i=0; i<(1<<n); i++) { k.clear(); for(int j=0; j<n; j++) { if(i&(1<<j)) k.push_back(j); } int sz=k.size(); bool flag=true; for(int p=0; p<sz; p++) for(int q=0; q<sz; q++) if(ma[k[p]][k[q]]) flag=false; if(flag&&ans<sz) { res.clear(); ans=sz; for(int p=0; p<sz; p++) res.push_back(k[p]); } } int num=res.size(); printf("%d ",num); for(int i=0; i<num; i++) ss[i]=xs[res[i]]; sort(ss,ss+num); for(int i=0; i<num; i++) cout<<ss[i]<<endl; return 0; }