题目链接:传送门

思路:

强连通缩点,重建图,然后广搜找最长路径。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 1e6+;
int head[maxn],next[maxn],ver[maxn],tot;
int low[maxn],num[maxn],tim,co[maxn],col,si[maxn];
int vis[maxn],dis[maxn];
int st[maxn],top,a[maxn],in[maxn],que[maxn],w,t;
int xx[maxn],yy[maxn],nu[maxn],ans,m,n,vv[maxn];
int MIN(int x,int y)
{
return x<y?x:y;
}
int MAX(int x,int y)
{
return x>y?x:y;
}
void Init()
{
memset(vis,,sizeof(vis));
memset(in,,sizeof(in));
memset(vv,,sizeof(vv));
top=;tim=;tot=;col=;w=;t=;
}
void addedge(int u,int v)
{
ver[++tot]=v;next[tot]=head[u];head[u]=tot;
}
void Tarjan(int u)
{
low[u]=num[u]=++tim;
st[++top]=u;
for(int i=head[u];i;i=next[i]){
int v=ver[i];
if(!num[v]){
Tarjan(v);
low[u]=MIN(low[u],low[v]);
}
else if(!co[v]) low[u]=MIN(low[u],num[v]);
}
if(low[u]==num[u]){
col++;
co[u]=col;
si[col]=a[u];
vv[col]=MAX(vv[col],vis[u]);
while(st[top]!=u){
co[st[top]]=col;
vv[col]=MAX(vv[col],vis[st[top]]);
si[col]+=a[st[top]];
top--;
}
top--;
}
}
bool cmp(int x,int y)
{
if(xx[x]!=xx[y]) return xx[x]<xx[y];
else return yy[x]<yy[y];
}
void Remove()
{
memset(head,,sizeof(head));
tot=;
for(int i=;i<=m;i++){
nu[i]=i;
xx[i]=co[xx[i]];
yy[i]=co[yy[i]];
}
sort(nu+,nu+m+,cmp);
}
void Build()
{
for(int i=;i<=m;i++){
int z=nu[i];
if(xx[z]!=yy[z]&&(xx[z]!=xx[nu[i-]]||yy[z]!=yy[nu[i-]]))
addedge(xx[z],yy[z]),in[yy[z]]++;
}
}
int main(void)
{
int i,j,ss,pp,tp;
scanf("%d%d",&n,&m);
Init();
for(i=;i<=m;i++){
scanf("%d%d",&xx[i],&yy[i]);
addedge(xx[i],yy[i]);
}
for(i=;i<=n;i++) scanf("%d",&a[i]);
scanf("%d%d",&ss,&pp);
for(i=;i<=pp;i++){
scanf("%d",&tp);vis[tp]=;
} for(i=;i<=n;i++)
if(!num[i]) Tarjan(i);
Remove();
Build();
que[++w]=co[ss];
dis[co[ss]]=si[co[ss]];
while(t<w){
int u=que[++t];
for(i=head[u];i;i=next[i]){
int v=ver[i];
if(dis[v]<dis[u]+si[v]) dis[v]=dis[u]+si[v],que[++w]=v;
}
}
int mx=;
for(i=;i<=col;i++)
if(vv[i]==) mx=MAX(mx,dis[i]);
printf("%d\n",mx);
return ;
}

LOJ-10096(强连通+bfs)的更多相关文章

  1. loj 1426(dfs + bfs)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1426 思路:首先我们预处理出每一个"*"在某一方向上最终能到达的位 ...

  2. loj 1046(bfs)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26766 思路:由于数据不是很大,我们可以枚举骑士最后聚集的位置,然 ...

  3. 4612 warm up tarjan+bfs求树的直径(重边的强连通通分量)忘了写了,今天总结想起来了。

    问加一条边,最少可以剩下几个桥. 先双连通分量缩点,形成一颗树,然后求树的直径,就是减少的桥. 本题要处理重边的情况. 如果本来就两条重边,不能算是桥. 还会爆栈,只能C++交,手动加栈了 别人都是用 ...

  4. PAT 甲级 1013 Battle Over Cities (25 分)(图的遍历,统计强连通分量个数,bfs,一遍就ac啦)

    1013 Battle Over Cities (25 分)   It is vitally important to have all the cities connected by highway ...

  5. 洛谷P1262 间谍网络[强连通分量 BFS]

    题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...

  6. loj 1377 (bfs)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1377 思路:这道题只要处理好遇到"*"这种情况就可以搞定了.我们可 ...

  7. loj 1185(bfs)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26898 思路:我们可以给定有直接边相连的两点的距离为1,那么就是求 ...

  8. loj 1165(bfs+康托展开)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26879 思路:题目意思很简单,就是通过一些位置的交换,最后变成有序 ...

  9. loj 1055(bfs)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26772 思路:注意判重就行,开个6维数组记录3个robots的位置 ...

随机推荐

  1. keepliave

    keepalived的主要功能 1. healthcheck:           检查后端节点是否正常工作           如果发现后端节点异常,就将该异常节点从调度规则中删除:        ...

  2. windows php exec()不生效问题

    开始 $cmd = 'java -jar C:/xampp/htdocs/dev_env/replace_word_content.jar'; 报错java不是内部命令 换成 $cmd = 'C:\P ...

  3. python之科学函数课——Numpy

    一般来讲,数据都是由行列表示的,也就是矩阵,类似于Excel表格一样的东西. 首先我们学习一下Numpy,装好anaconda之后默认是装好的,下面是numpy的一些函数库:Numpy是科学计算库,是 ...

  4. ES match match_phrase term willcard的查询原理

    比如:要求实现SQL中like “%xxxx%”的匹配效果. wildcard通配 这种效果在ES中最匹配的做法是用wildcard query通配,这种情况不会对query分词,而是直接遍历倒排索引 ...

  5. IIS的UrlRewrite模块

    以前在webform中重写URL是在Global.asax中的Addplication_BeginRequest事件中写代码进行跳转 今天介绍使用IIS提供的UrlRewrite模块实现URL重写 首 ...

  6. scikit_learn,NLTK导入分类器相关流程命令

  7. vue 配置了全局的http拦截器,单独某个组件不需要这个拦截器,如何设置

    之前写过关于全局配置http拦截器的随笔,现在有个需求,在微信支付时,生成二维码,页面显示一个遮罩层,二维码页面需要每两秒请求一次接口,若返回结果为已支付,则进行页面跳转,但因为全局http中load ...

  8. asp.net 下载视频 保存视屏

    第一张图片为html,第一站图片为js上传视频并播放,限定大小,第三张图片是将视频保存到以字节流的方式保存到数据中,或者是将视频保存到项目中 String filename=this.Filevide ...

  9. project2

    [概念] 要好好理解并且背下来记住 Java基础,呵呵呵.自己查吧. local host搞错了,整个跑不出来.真尴尬.不理解啊. static原来是全局的意思啊,好吧.以前都忘了,这次该记住了.st ...

  10. 面向对象的 __slots__

    优点: 1. __slots__ 能够减小内存的占用,限制对象只能有这几个属性,再加属性会报错 . 副作用: 1. 设置了__slots__之后,实例对象就没有__dict__了 2. __slots ...