题目链接:点击打开链接

题目大意:提莫埋了很多蘑菇,有些蘑菇之间有一条有向边,u->v,若u爆炸则v爆炸,而且每个蘑菇只能引起与之相连的一个蘑菇的爆炸(当时题目意思读错,以为是求单向联通分量,然后大错特错~~~~),就是求有向图上的最小路径覆盖,不过因为原图可能存在环,所以要先进行缩点后在跑二分匹配求最小路径覆盖。

//wait...wait...这个是DAG上的最小路径覆盖,所以如果不进行缩点是一定会错的
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=100010;
const int maxm=100010;
struct edge_t
{int v,next;
}edge[maxm],newedge[maxn];
int Ecnt,newEcnt;
int vertex[maxn],newvertex[maxn];
int Low[maxn],DFN[maxn],Stack[maxn],Belong[maxn];
int Index,top;
int scc;
bool Instack[maxn];
void init_Graph()
{Ecnt=newEcnt=0;memset(vertex,-1,sizeof(vertex));memset(newvertex,-1,sizeof(newvertex));
}
void make_edge(int u,int v)
{edge[Ecnt].v=v;edge[Ecnt].next=vertex[u];vertex[u]=Ecnt++;
}
void make_newedge(int u,int v)
{newedge[newEcnt].v=v;newedge[newEcnt].next=newvertex[u];newvertex[u]=newEcnt++;
}
void Tarjan(int u)
{int v;Low[u]=DFN[u]=++Index;Stack[top++]=u;Instack[u]=true;for(int i=vertex[u];i!=-1;i=edge[i].next){v=edge[i].v;if(!DFN[v]){Tarjan(v);if(Low[u]>Low[v]) Low[u]=Low[v];}else if(Instack[v]&&Low[u]>DFN[v])Low[u]=DFN[v];}if(Low[u]==DFN[u]){scc++;do{v=Stack[--top];Instack[v]=false;Belong[v]=scc;}while(v!=u);}
}
void solve(int n)
{memset(DFN,0,sizeof(DFN));memset(Instack,false,sizeof(Instack));Index=scc=top=0;for(int i=1;i<=n;i++)if(!DFN[i])Tarjan(i);
}
int linker[maxn];
bool used[maxn];
bool dfs(int u)
{for(int i=newvertex[u];i!=-1;i=newedge[i].next){int v=newedge[i].v;if(!used[v]){used[v]=true;if(linker[v]==-1||dfs(linker[v])){linker[v]=u;return true;}}}return false;
}
int hungary()
{int res=0;memset(linker,-1,sizeof(linker));for(int u=1;u<=scc;u++){memset(used,false,sizeof(used));if(dfs(u)) res++;}return res;
}
//缩点建立新图
void Build_newmap(int n)
{for(int u=1;u<=n;u++)for(int i=vertex[u];i!=-1;i=edge[i].next){int v=edge[i].v;if(Belong[u]!=Belong[v])make_newedge(Belong[u],Belong[v]);}
}
int main()
{int t;int n,m;int u,v;scanf("%d",&t);while(t--){init_Graph();scanf("%d%d",&n,&m);for(int i=0;i<m;i++){scanf("%d%d",&u,&v);make_edge(u,v);}solve(n);Build_newmap(n);printf("%d\n",scc-hungary());}return 0;
}

Timo's mushrooms CSU - 1991 (第十三届湖南省赛热身赛题)相关推荐

  1. 【蓝桥备赛冲刺】2022年第十三届省赛模拟题题解C/C++

    食用该篇博客前须知: (0)第一次写博客,如有地方处理不好请见谅,后续会不断提高自己的写博客能力. (1)在头文件处偷了懒,使用的都是万能头文件.(最好还是自己要记住常用头文件 (2)使用的是C++, ...

  2. 蓝桥杯2022年第十三届省赛真题-纸张尺寸

    题目描述 在 ISO 国际标准中定义了 A0 纸张的大小为 1189mm × 841mm,将 A0 纸沿长边对折后为 A1 纸,大小为 841mm × 594mm,在对折的过程中长度直接取下整(实际裁 ...

  3. 蓝桥杯题目 2682: 蓝桥杯2022年第十三届省赛真题-GCD

    题目描述 给定两个不同的正整数 a, b,求一个正整数 k 使得 gcd(a + k, b + k) 尽可能大,其中 gcd(a, b) 表示 a 和 b 的最大公约数,如果存在多个 k,请输出所有满 ...

  4. 消除游戏——蓝桥杯2022年第十三届省赛真题

    题目描述 在一个字符串 S 中,如果 S i = S i−1 且S i 不等于S i−1,则称 S i 和 S i+1 为边缘字符.如果S i 不等于S i−1且 S i = S i+1,则 S i− ...

  5. 蓝桥杯嵌入式第十三届省赛真题1

    源码在这需要的可以自取 目录 1 题目 2 分析 3 项目结构 3.1 LCD显示部分 3.2 按键控制部分 3.3 密码部分 3.4 LED部分 3.5 数据处理部分 3.6 PWM控制部分 3.7 ...

  6. 每日一题——质因数个数(蓝桥杯2022年第十三届省赛真题)

    如何将一个正整数分解质因数:每日一题--将一个正整数分解质因数_笨小古的博客-CSDN博客 题目描述:给定正整数 n,请问有多少个质数是 n 的约数. 输入格式:输入的第一行包含一个整数 n. 输出格 ...

  7. 蓝桥杯2022年第十三届省赛真题-选数异或

    题目描述 给定一个长度为 n 的数列 A1, A2, · · · , An 和一个非负整数 x,给定 m 次查询, 每次询问能否从某个区间 [l,r] 中选择两个数使得他们的异或等于 x . 输入 输 ...

  8. 蓝桥杯2022年第十三届省赛真题-积木画

  9. 18年第十三届黑龙江省赛

    2018年第十三届黑龙江省赛 现在的心情挺神奇的0.0,第一次出去参加ACM比赛,连着两场,黑龙江省赛和东北四省赛,感觉运气还是挺好的,黑龙江省赛(银)铜,东北四省赛铜,最大的感受就是感觉没有想象中的 ...

最新文章

  1. 土地档案管理系统需求分析
  2. php oracle视图,Oracle v$database视图分析
  3. Android VideoView播放视频遇到的问题
  4. 2021-2025年中国电子风扇速度控制器行业市场供需与战略研究报告
  5. redis在window下的启动
  6. mac下cordova的ios-deploy安装问题
  7. redist mysql_Windows下安装 MySQL
  8. K-means算法(知识点梳理)
  9. 使用OpenCV和Python构建自己的车辆检测模型
  10. 考拉情书---一片道歉叶
  11. OpenCV中(rows,cols)与图像(x,y)
  12. 分布式原理:一文了解 Gossip 协议
  13. CS 入门技能树测评
  14. ffmpeg 无损 剪切 分割 视频
  15. C#常用加密解密方法(AES加密解密)
  16. 运营好一个自媒体公众号,你还需要一个错别字检查工具
  17. Linux指令4-文本处理(grep,sek,awk)
  18. 还在找Mac版本的音乐合成器吗?看这里~
  19. super 的用法及意义
  20. leetcode55java_Leetcode-957 N 天后的牢房 Java 详细注释

热门文章

  1. Cannot open a library at 'FileMapping
  2. 用计算机算方程近似值,借助CASIO图形计算器探索方程近似解的求解
  3. 卓越讲坛:编辑视角:如何写作学术论文
  4. 春节被拷问事业薪资如何应对?
  5. 最全markdown教程,它来了
  6. 中兴VIVO陷眼纹技术之争:谁是复制者?
  7. Qt使用大图标工具栏、svg格式图标
  8. android 系统app指定加载32-bit/64-bit so库
  9. 磁盘管理-基本磁盘、动态磁盘、GPT磁盘、MBR磁盘/CHS(cylinder柱面-head磁头-sector扇区)
  10. 毕业设计答辩ppt技巧