BalticOI2017 Political Development
2022/6/4 23:22:54
本文主要是介绍BalticOI2017 Political Development,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
对于度数\(<k\)的点可以快速的求出包含它的团,问题就是解决度数比较大的团
注意到题目特殊限制,没有一个导出子图所有点度数都较大,所以一定可以通过不停地遍历、删除度数\(<k\)的点来遍历整张图(类似于拓扑排序)
并且我们可以发现对于一个已经check的点删除后不会对答案有影响,所以我们当点个数\(>ans\)再check
点击查看代码
//CAN'T FORGET //CAN'T FORGET //CAN'T FORGET //#pragma GCC optimize("Ofast") #include<bits/stdc++.h> using namespace std; #define _ 0 const int maxn=1e6+5; const int inf=0x3f3f3f3f; inline int read() { int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); } return x*f; } struct node{ int to,nxt; }edge[maxn]; int head[maxn],tot; void addedge(int u,int v) { edge[++tot].to=v; edge[tot].nxt=head[u]; head[u]=tot; } int n,k,dgr[maxn]; vector<int> stk,stk1; unordered_map<int,int> vis[maxn]; int vis1[maxn],cnt,ans; bool check() { for(int i=stk1.size()-1;i>=0;i--) for(int j=i-1;j>=0;j--) if(vis[stk1[i]].find(stk1[j])==vis[stk1[i]].end()) return false; return true; } void solve(int x) { stk.clear(); for(int i=head[x];i;i=edge[i].nxt) { int y=edge[i].to; if(vis1[y]) continue; stk.push_back(y); } int sz=stk.size(); for(int i=0;i<(1<<sz);i++) { if(__builtin_popcount(i)+1<=ans) continue; stk1.clear(); stk1.push_back(x); for(int j=0;j<sz;j++) if((i>>j)&1) stk1.push_back(stk[j]); if(check()) ans=stk1.size(); } return ; } queue<int> q; void bfs() { for(int i=0;i<n;i++) if(dgr[i]<k) q.push(i); while(!q.empty()) { int x=q.front(); q.pop(); solve(x); vis1[x]=1; for(int i=head[x];i;i=edge[i].nxt) { int y=edge[i].to; dgr[y]--; if(dgr[y]==k-1) q.push(y); } } return ; } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); // freopen("poldev.in","r",stdin); // freopen("poldev.out","w",stdout); cin>>n>>k; for(int i=0;i<n;i++) { cin>>dgr[i]; for(int j=1;j<=dgr[i];j++) { int x; cin>>x; addedge(x,i); vis[i][x]=1; } } bfs(); cout<<ans<<endl; return ~~(0^_^0); } /* Notes: 1.看所有题目 2.注意数据范围 3.想想自己还能做什么而不是做了什么 4.看清题目!!! 5.记得把调试代码删掉!!!! 6.longlong时 1要写成1ll 7.Think twice code once, think once code forever! */
这篇关于BalticOI2017 Political Development的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享