分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

bzoj2208: [Jsoi2010]连通数

发布时间:2023-09-06 01:42责任编辑:白小东关键词:暂无标签

补写。

学了学用bitset优化floyd,做这题比用强联通缩点+DP方便多了。

bitset具体就是一串编码,比如说定义bitset<2100>b,b就是一个2100位的01串。

由于位运算的存在,那么folyd的时候可以省掉一个j的循环,直接用整个串和另一个串做或运算

就像这样

for(int k=1;k<=n;k++)
???????  for(int i=1;i<=n;i++)
???????????    if(g[i][k]==1)g[i]|=g[k];

然后用count可以很快求出串中1的个数

这题就完了。

#include<cstdio>#include<iostream>#include<cstring>#include<cstdlib>#include<algorithm>#include<cmath>#include<bitset>using namespace std;bitset<2100>g[2100];char ss[2100];int main(){ ???int n; ???scanf("%d",&n); ???for(int i=1;i<=n;i++) ???{ ???????scanf("%s",ss+1); ???????for(int j=1;j<=n;j++) ???????????if(i!=j) ???????????????g[i][j]=ss[j]-‘0‘; ???????????else ????????????????g[i][j]=1; ???} ???for(int j=1;j<=n;j++) ???????for(int i=1;i<=n;i++) ???????????if(g[i][j]==1)g[i]|=g[j]; ???int ans=0; ???for(int i=1;i<=n;i++)ans+=g[i].count(); ???printf("%d\n",ans); ???return 0;}

bzoj2208: [Jsoi2010]连通数

原文地址:https://www.cnblogs.com/AKCqhzdy/p/8446121.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved