• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            O(1) 的小樂

            Job Hunting

            公告

            記錄我的生活和工作。。。
            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            統計

            • 隨筆 - 182
            • 文章 - 1
            • 評論 - 41
            • 引用 - 0

            留言簿(10)

            隨筆分類(70)

            隨筆檔案(182)

            文章檔案(1)

            如影隨形

            搜索

            •  

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            Timus 1078 SPFA

            之前做這個題使用的方法是Floyd其所有點的最長路,但是這個還可以使用SPFA來做,因為這個圖是肯定沒有正環的圖,然后把所有入讀為0的點,都一次性的加入到SPFA的隊列或者棧中,則可以求解出一個全局最大值。然后用SPFA可以加一個父親域,來回復我們獲得的路徑。

             

               1:   
               2:  #include <queue>
               3:  #include <iostream>
               4:  #include <string.h>
               5:  #include <stdio.h>
               6:  #include <algorithm>
               7:  #include <vector>
               8:  using namespace std;
               9:  #define V 30010      // vertex
              10:  #define E 150010      // edge
              11:  #define INF 0x3F3F3F3F
              12:   
              13:  struct node
              14:  {
              15:      int v, w, next;
              16:  }pnt[E];
              17:   
              18:  int head[V];
              19:  int  dis[V];
              20:  bool vis[V];
              21:  int  cnt[V];          // the num of the operation of push to Quque. negatvie cycle.
              22:  int e = 0;            // the index of the edge
              23:  int N ;               // the num of the vertex.
              24:  int M ;               // the num of edges
              25:  int src, sink;
              26:  int father[V];
              27:  int ru[V];
              28:  void addedge(int  u, int v, int w)
              29:  {
              30:      pnt[e].v = v; pnt[e].w= w;
              31:      pnt[e].next = head[u]; head[u] = e++;
              32:  }
              33:  void SPFA_init()
              34:  {
              35:      e=0;
              36:      memset(head, -1,sizeof(head));
              37:      memset(vis, 0 ,sizeof(vis));
              38:      memset(cnt, 0 ,sizeof(cnt));
              39:      for(int i=0; i<=N; i++) dis[i] = -1;          // MODIFIED
              40:      memset(father, -1, sizeof(father));
              41:  }
              42:  int SPFA()
              43:  {
              44:      queue<int> Q;
              45:      for(int i=1; i<=N; i++) 
              46:      {
              47:          src = i;
              48:          if(ru[i] == 0)
              49:          {
              50:              Q.push(src); vis[src] = 1; dis[src] = 0; ++cnt[src];
              51:          }
              52:      }
              53:      while(!Q.empty()) 
              54:      {
              55:          int u = Q.front(); Q.pop();  vis[u] = 0;
              56:          for(int i=head[u]; i!=-1; i=pnt[i].next)
              57:          {
              58:              int v = pnt[i].v;
              59:              if( dis[v] < dis[u] + pnt[i].w  )          // MODIFIED
              60:              {
              61:                  dis[v] = dis[u] + pnt[i].w;
              62:                  father[v] = u;
              63:                  if(!vis[v]) { Q.push(v); vis[v] = 1;}
              64:                  if( ++cnt[v] > N) return -1;   // positive  cycle.
              65:              }
              66:          }
              67:      }
              68:      if(dis[sink] == -1 ) return -2;            // can't from src to sink. 
              69:      return dis[sink];
              70:  }
              71:   
              72:  int main()
              73:  {
              74:      //freopen("1078.txt","r",stdin);
              75:      scanf("%d", &N);
              76:      int a, b;
              77:      vector<pair<int, int> > C;
              78:      memset(ru, 0 ,sizeof(ru));
              79:      SPFA_init();
              80:      for(int i=0; i<N; i++)
              81:      {
              82:          int a, b;
              83:          scanf("%d%d", &a, &b);
              84:          C.push_back(make_pair(a,b));
              85:          for(int i=0; i<C.size(); i++)
              86:          {
              87:              if(a<C[i].first && b> C[i].second)
              88:              {
              89:                  ru[C.size()]++;
              90:                  addedge(i+1,C.size() , 1);
              91:              }
              92:              else if(a> C[i].first && b< C[i].second)
              93:              {
              94:                  ru[i+1]++;
              95:                  addedge(C.size(), i+1,1);
              96:              }
              97:          }
              98:      }
              99:      SPFA();
             100:      //for(int i=1; i<=N; i++) cout<<father[i]<<" "; cout<<endl;
             101:      int ret  =0; int idx = -1;
             102:      for(int i=1; i<=N; i++)
             103:      {
             104:          if(dis[i]>ret)
             105:          {
             106:              ret = dis[i];
             107:              idx = i;
             108:          }
             109:      }
             110:      if(ret == 0)
             111:      {
             112:          cout<<1<<endl;
             113:          cout<<1<<endl;
             114:      }
             115:      else
             116:      {
             117:          cout<<ret+1<<endl;
             118:          vector<int> D;
             119:          D.push_back(idx);
             120:          while(father[idx] != -1)
             121:          {
             122:              D.push_back(father[idx]);
             123:              idx = father[idx];
             124:          }
             125:          reverse(D.begin(), D.end());
             126:          for(int i=0; i<D.size(); i++) cout<<D[i]<<" ";
             127:          cout<<endl;
             128:      }
             129:      return 0;
             130:  }

            posted on 2012-11-10 14:39 Sosi 閱讀(398) 評論(0)  編輯 收藏 引用

            統計系統
            狠色狠色狠狠色综合久久| 久久人人爽人人爽人人AV东京热| 99久久99这里只有免费的精品| 青青热久久综合网伊人| 久久久久久亚洲精品无码| 婷婷国产天堂久久综合五月| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | A狠狠久久蜜臀婷色中文网| 亚洲综合久久综合激情久久| 亚洲国产天堂久久综合| 国内精品久久久人妻中文字幕| 国产精品欧美亚洲韩国日本久久 | 亚洲嫩草影院久久精品| 免费无码国产欧美久久18| 青草影院天堂男人久久| 久久久久久伊人高潮影院| 国内精品久久久久国产盗摄| 久久久久人妻一区精品性色av| 91精品无码久久久久久五月天| 久久久久久伊人高潮影院| 久久久久无码中| 国产精品99久久精品爆乳| 91精品国产综合久久婷婷| 亚洲а∨天堂久久精品| 欧美777精品久久久久网| 99久久人妻无码精品系列| 无码人妻精品一区二区三区久久 | 久久er热视频在这里精品| 亚洲欧美日韩中文久久| 久久亚洲精品国产亚洲老地址| 99久久777色| 成人妇女免费播放久久久| 国产精品丝袜久久久久久不卡| 久久久久国产精品| 久久久精品午夜免费不卡| 久久午夜免费视频| 94久久国产乱子伦精品免费| 国产成人精品综合久久久| 精品久久久久一区二区三区 | 久久精品无码一区二区app| 久久亚洲中文字幕精品有坂深雪|