• 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 }
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    CentOS 7 安装MySQL 5.6遇到的疑难杂症小结
    ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'
    MS SQL巡检系列——检查外键字段是否缺少索引
    Linix登录报"/etc/profile: line 11: syntax error near unexpected token `$'{ ''"
    MS SQL巡检系列——检查重复索引
    [转载】——故障排除:Shared Pool优化和Library Cache Latch冲突优化 (文档 ID 1523934.1)
    SQL Server 2014 Database Mail重复发送邮件特殊案例
    ORACLE推导参数Derived Parameter介绍
    SQL SERVER 数据库各版本功能对比
    SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析
  • 原文地址:https://www.cnblogs.com/Shy-key/p/6979131.html
Copyright © 2020-2023  润新知