zoukankan      html  css  js  c++  java
  • POJ——T3160 Father Christmas flymouse

    Time Limit: 1000MS   Memory Limit: 131072K
    Total Submissions: 3496   Accepted: 1191

    缩点,然后每个新点跑一边SPFA 

    思路不难 ,注意细节~

      1 #include <algorithm>
      2 #include <cstring>
      3 #include <cstdio>
      4 #include <queue>
      5 
      6 using namespace std;
      7 
      8 const int M(150000+5);
      9 const int N(30000+15);
     10 int n,m,u,v,val[N],ans;
     11 
     12 int hed[N],had[N],sumedge;
     13 struct Edge
     14 {
     15     int v,next;
     16 }edge[M];
     17 void ins(int u,int v,int *head)
     18 {
     19     sumedge++;
     20     edge[sumedge].v=v;
     21     edge[sumedge].next=head[u];
     22     head[u]=sumedge;
     23 }
     24 
     25 int dfn[N],low[N],tim;
     26 int col[N],sumcol,cval[N];
     27 int Stack[N],instack[N],top;
     28 void DFS(int now)
     29 {
     30     dfn[now]=low[now]=++tim;
     31     Stack[++top]=now,instack[now]=1;
     32     for(int i=hed[now];i;i=edge[i].next)
     33     {
     34         int to=edge[i].v;
     35         if(!dfn[to]) DFS(to),low[now]=min(low[now],low[to]);
     36         else if(instack[to]) low[now]=min(low[now],dfn[to]);
     37     }
     38     if(low[now]==dfn[now])
     39     {
     40         col[now]=++sumcol;
     41         cval[sumcol]+=val[now];
     42         for(;Stack[top]!=now;top--)
     43         {
     44             col[Stack[top]]=sumcol;
     45             cval[sumcol]+=val[Stack[top]];
     46             instack[Stack[top]]=0;
     47         }
     48         instack[now]=0;top--;
     49     }
     50 }
     51 
     52 int rd[N];
     53 void Get_map()
     54 {
     55     for(u=1;u<=n;u++)
     56         for(int i=hed[u];i;i=edge[i].next)
     57         {
     58               v=edge[i].v;
     59               if(col[u]!=col[v])
     60               rd[col[v]]++,ins(col[u],col[v],had);
     61         }
     62 }
     63 
     64 queue<int>que;
     65 int inq[N],dis[N];
     66 int SPFA(int s)
     67 {
     68     int ret=dis[s]=cval[s];
     69     memset(inq,0,sizeof(inq));
     70     que.push(s);inq[s]=1;
     71     while(!que.empty())
     72     {
     73         u=que.front();que.pop(),inq[u]=0;
     74         for(int i=had[u];i;i=edge[i].next)
     75         {
     76             v=edge[i].v;
     77             if(dis[v]<dis[u]+cval[v])
     78             {
     79                 dis[v]=dis[u]+cval[v];
     80                 ret=max(ret,dis[v]);
     81                 if(!inq[v])
     82                     que.push(v),inq[v]=1;
     83             }
     84         }
     85     }
     86     return ret;
     87 }
     88 
     89 void init()
     90 {
     91     sumcol=sumedge=top=tim=ans=0;
     92     memset(rd,0,sizeof(rd));
     93     memset(hed,0,sizeof(hed));
     94     memset(had,0,sizeof(had));
     95     memset(dis,0,sizeof(dis));
     96     memset(col,0,sizeof(col));
     97     memset(dfn,0,sizeof(dfn));
     98     memset(low,0,sizeof(low));
     99     memset(val,0,sizeof(val));
    100     memset(cval,0,sizeof(cval));
    101     memset(Stack,0,sizeof(Stack));
    102     memset(instack,0,sizeof(instack));
    103 }
    104 
    105 int main()
    106 {
    107     while(~scanf("%d%d",&n,&m))
    108     {
    109         init();
    110         for(int i=1;i<=n;i++)
    111             scanf("%d",val+i),val[i]=max(0,val[i]);
    112         for(int u,v;m--;)
    113             scanf("%d%d",&u,&v),ins(u+1,v+1,hed);
    114         for(int i=1;i<=n;i++) if(!dfn[i]) DFS(i);
    115         Get_map();
    116         for(int i=1;i<=sumcol;i++)
    117             if(!rd[i]) ans=max(ans,SPFA(i));
    118         printf("%d
    ",ans);
    119     }
    120     return 0;
    121 }
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    MySql 获取当前节点及递归所有上级节点
    MySql创建树结构递归查询存储过程
    F2工作流引擎Web层全新扁平化UI上线
    F2工作流引擎参与者类型成员的交、并、互拆计算规则
    F2工作流引擎之组织用户模型(四)
    F2工作流引擎之 工作流运转模型(三)
    F2工作流引擎之 概述(一)
    离线安装docker,并导入docker镜像
    sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set 的解决办法
    yml 文件中使用环境变量
  • 原文地址:https://www.cnblogs.com/Shy-key/p/6979131.html
Copyright © 2011-2022 走看看