解题

首先缩点没啥可说的,然后考虑枚举这次逆行的边。具体来说在正常的图和反图上各跑一次最长路,然后注意减掉起点的贡献,用拓扑排序实现(我这里瞎写了个Bellman_Ford,其实在DAG上这好像和拓扑排序的复杂度是一样的=。=)

一个细节:注意可能整个图是个强连通分量,所以答案初始是起点所在的强联通分量的大小

 1 #include<queue>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 const int N=100005;
 7 int dfn[N],low[N],col[N],stk[N],ins[N],inq[N],siz[N],dis[2][N];
 8 int p[N],noww[N],goal[N],P[N][2],Noww[N][2],Goal[N][2];
 9 int n,m,c,t1,t2,cnt,cnt0,cnt1,tot,top,ans;
10 queue<int> qs;
11 void link(int f,int t)
12 {
13     noww[++cnt]=p[f];
14     goal[cnt]=t,p[f]=cnt;
15 }
16 void relink(int f,int t)
17 {
18     Noww[++cnt0][0]=P[f][0];
19     Goal[cnt0][0]=t,P[f][0]=cnt0;
20     Noww[++cnt1][1]=P[t][1];
21     Goal[cnt1][1]=f,P[t][1]=cnt1;
22 }
23 void Tarjan_SCC(int nde)
24 {
25     dfn[nde]=low[nde]=++tot;
26     stk[++top]=nde,ins[nde]=true;
27     for(int i=p[nde];i;i=noww[i])
28         if(!dfn[goal[i]])
29             Tarjan_SCC(goal[i]),low[nde]=min(low[nde],low[goal[i]]);
30         else if(ins[goal[i]])
31             low[nde]=min(low[nde],low[goal[i]]);
32     if(dfn[nde]==low[nde])
33     {
34         c++; int tmp;
35         do
36         {
37             tmp=stk[top--];
38             ins[tmp]=false;
39             col[tmp]=c,siz[c]++;
40         }while(nde!=tmp);
41     }
42 }
43 void Bellman_Ford(int s,int t)
44 {
45     memset(dis[t],0xc0,sizeof dis[t]);
46     dis[t][s]=siz[s],qs.push(s),inq[s]=true;
47     while(!qs.empty())
48     {
49         int tn=qs.front();
50         qs.pop(),inq[tn]=false;
51         for(int i=P[tn][t];i;i=Noww[i][t])
52             if(dis[t][Goal[i][t]]<dis[t][tn]+siz[Goal[i][t]])
53             {
54                 dis[t][Goal[i][t]]=dis[t][tn]+siz[Goal[i][t]];
55                 if(!inq[Goal[i][t]])
56                     qs.push(Goal[i][t]),inq[Goal[i][t]]=true;
57             }
58     }
59 }
60 int main()
61 {
62     scanf("%d%d",&n,&m);
63     for(int i=1;i<=m;i++)
64         scanf("%d%d",&t1,&t2),link(t1,t2);
65     for(int i=1;i<=n;i++)
66         if(!dfn[i]) Tarjan_SCC(i);
67     for(int i=1;i<=n;i++)
68         for(int j=p[i];j;j=noww[j])
69             if(col[i]!=col[goal[j]])
70                 relink(col[i],col[goal[j]]);
71     Bellman_Ford(col[1],0),Bellman_Ford(col[1],1),ans=siz[col[1]];
72     for(int i=1;i<=c;i++)
73         for(int j=P[i][1];j;j=Noww[j][1])
74             ans=max(ans,dis[0][i]+dis[1][Goal[j][1]]-siz[col[1]]);
75     printf("%d",ans);
76     return 0;
77 }

View Code

转载于:https://www.cnblogs.com/ydnhaha/p/9839732.html

解题:USACO15JAN Grass Cownoisseur相关推荐

  1. 洛谷 P3119 [USACO15JAN]草鉴定Grass Cownoisseur (SCC缩点,SPFA最长路,枚举反边)

    P3119 [USACO15JAN]草鉴定Grass Cownoisseur 题目描述 In an effort to better manage the grazing patterns of hi ...

  2. P3119 [USACO15JAN]草鉴定Grass Cownoisseur

    题目描述 In an effort to better manage the grazing patterns of his cows, Farmer John has installed one-w ...

  3. [USACO15JAN]草鉴定Grass Cownoisseur

    tarjan缩点+最短路 这道题我想了一半的正解,就是缩点+DAG上考虑,之后图只有一种情况:1号点连着大量的点,大量的点连着1号点,部分能到达1号点的点连接着1号点能到达的部分点.转向就是要从1号点 ...

  4. 拓扑排序最长链-P3119 [USACO15JAN]草鉴定Grass Cownoisseur

    https://www.luogu.org/problem/show?pid=3119 本来我是来练习tarjan的,结果tarjan部分直接copy了,反而拓扑排序部分想了好久: 这道题SZB大神两 ...

  5. P3119 [USACO15JAN]草鉴定Grass Cownoisseur 缩点 topo或最长路

    题意:n个点 m条有向边,可以来回走一个点,问在可以逆行一次的情况下最多有能经过多少个不同的点. 解: 先缩点去环建新图,新图建正序(表示以1为起点到达的点)和逆序(以1为终点到达的点) ,然后最长路 ...

  6. 图论复习(各类习题)

    可以结合这篇博客进行复习:http://www.cnblogs.com/z360/p/7363034.html 一.强连通分量.缩点 习题: 洛谷--P2746 [USACO5.3]校园网Networ ...

  7. tarjan习题题解

    tarjan习题 一.割点: 1.模板: 洛谷P3388 [模板]割点(割顶) 题目背景 割点 题目描述 给出一个n个点,m条边的无向图,求图的割点. 输入输出格式 输入格式: 第一行输入n,m 下面 ...

  8. 2019.2-2019.3 TO-DO LIST

    DP P2723 丑数 Humble Numbers(完成时间:2019.3.1) P2725 邮票 Stamps(完成时间:2019.3.1) P1021 邮票面值设计(完成时间:2019.3.1) ...

  9. 退役前的做题记录1.0

    退役前的做题记录1.0 租酥雨最近很懒qwq,具体表现在写题的时候不想发题解了. 但是想想这样也不太好,就决定发个一句话(半句话到几句话不等)题解上来. 2018-09.18-2018-09.28 [ ...

最新文章

  1. 序列信号产生器的verilog HDL 设计
  2. 设计模式 策略模式
  3. campus bike at stanford
  4. HTTP协议(5)HTTP请求和响应
  5. 构建高可用服务器之 Keepalive参数详解
  6. [COCI] Zamjena
  7. 新东方mti百科知识pdf_20南航翻硕mti初试417上岸经验贴
  8. MySQL系列(一) MySQL体系结构概述
  9. jenkins 执行构建 并查看结果
  10. 在Mac电脑的输入法中如何开启自动纠正模糊拼音功能?
  11. Hibernate 学习的书-夏昕(1)
  12. power oj 2825: 拔河大赛(并查集)
  13. HHUOJ 1019 Friendship of Mouse(水题)
  14. 10麦客和300挖藕人
  15. 凸函数二阶条件的理解及常见函数解析
  16. 迷宫问题 深度优先搜索【c++】
  17. iOS 获取当前时间之后N天的日期
  18. mybatis与hibernate的对比
  19. 图片翻译成中文怎么弄?分享三个图片翻译小技巧
  20. Python自动点击鼠标脚本

热门文章

  1. 阿里云开发者大会核心看点揭晓,开发者最好的时代来了?
  2. 史上最轻量​!阿里新型单元测试Mock工具开源了
  3. FlinkX 如何读取和写入 Clickhouse?
  4. 《炉石传说》的退环境机制失败在哪
  5. 浅谈街霸的帧数据 (一):frame data
  6. Paxos一致性协议
  7. Spring boot 上传文件时 MultipartFile 报空指针
  8. v-charts修改点击图例事件,legendselectchanged
  9. Golang——垃圾回收GC
  10. 【Luogu】P4462异或序列(莫队)