加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

【JZOJ4857】Tourist Attractions(Bitset)

发布时间:2020-12-14 03:22:19 所属栏目:大数据 来源:网络整理
导读:题意:给定一个 n 个点的无向图,求这个图中有多少条长度为4的简单路径。 n=1500 思路: 1 #includemap 2 #include set 3 #includecmath 4 #includecstdio 5 #includevector 6 #includecstring 7 #includecstdlib 8 #includeiostream 9 #includealgorithm 10

题意:给定一个n个点的无向图,求这个图中有多少条长度为4的简单路径。

n<=1500

思路:

 1 #include<map>
 2 #include<set>
 3 #include<cmath>
 4 #include<cstdio>
 5 #include<vector>
 6 #include<cstring>
 7 #include<cstdlib>
 8 #include<iostream>
 9 #include<algorithm>
10 #include<bitset>
11 #define MAXN 1510
12 #define MAXM 4100000
13 using namespace std;
14 
15 typedef long long ll;
16 bitset<MAXN> a[MAXN],tmp;
17 
18 int head[MAXM],vet[MAXM],next[MAXM],n,i,j,tot;
19 ll size[MAXN];
20 ll ans;
21 
22 void add(int a,int b)
23 {
24   next[++tot]=head[a];
25   vet[tot]=b;
26   head[a]=tot;
27 }
28 
29 int main()
30 {
31     //freopen("jzoj4857.in","r",stdin);
32     //freopen("jzoj4857.out","w",stdout);
33     scanf("%d",&n);
34     for(int i=1;i<=n;i++)
35     {
36         scanf("n");
37         for(int j=1;j<=n;j++) 
38         {
39             char ch;
40             scanf("%c",&ch);
41             if(ch==1)
42              {
43                 add(i,j);
44                 size[i]++;
45                 a[i][j]=1;
46              }
47                 
48         }
49     }
50     for(int i=1;i<=n;i++)
51      for(int e=head[i];e;e=next[e])
52      {
53          int v=vet[e];
54          ans+=(size[i]-1)*(size[v]-1);
55          tmp=a[i]&a[v];
56          ans-=tmp.count();
57      }
58      printf("%lldn",ans);
59      return 0;
60 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读