• <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

            公告

            記錄我的生活和工作。。。
            <2012年11月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678

            統(tǒng)計

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

            留言簿(10)

            隨筆分類(70)

            隨筆檔案(182)

            文章檔案(1)

            如影隨形

            搜索

            •  

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            Timus 1078 SPFA

            之前做這個題使用的方法是Floyd其所有點的最長路,但是這個還可以使用SPFA來做,因為這個圖是肯定沒有正環(huán)的圖,然后把所有入讀為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 閱讀(403) 評論(0)  編輯 收藏 引用

            統(tǒng)計系統(tǒng)
            无码精品久久一区二区三区| 天天做夜夜做久久做狠狠| 亚洲AV无码一区东京热久久| av色综合久久天堂av色综合在| 国产精品成人久久久| 久久人人爽爽爽人久久久| 亚洲国产精久久久久久久| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 久久综合九色综合97_久久久| 国产成人综合久久精品尤物| 偷偷做久久久久网站| 国产亚洲精品自在久久| 亚洲精品久久久www| 99久久99久久精品免费看蜜桃 | 亚洲va中文字幕无码久久| 国产精品久久久久久久| 久久精品国产只有精品66| 久久国产精品一国产精品金尊| 国产激情久久久久影院| 久久久久久亚洲Av无码精品专口| 国产亚洲成人久久| 久久精品国产亚洲AV嫖农村妇女| 色婷婷噜噜久久国产精品12p| 久久免费视频观看| 精品熟女少妇av免费久久| 日韩人妻无码一区二区三区久久99| 色综合久久最新中文字幕| 国产精品99久久免费观看| 国产精品99久久久精品无码| 女人高潮久久久叫人喷水| 久久精品国产色蜜蜜麻豆| 久久综合狠狠色综合伊人| 久久福利青草精品资源站| 色综合久久中文字幕无码| 久久久久久曰本AV免费免费| 亚洲国产一成久久精品国产成人综合 | 欧美激情精品久久久久久久九九九| 国产精品久久久久9999高清| 日韩人妻无码精品久久免费一 | 久久亚洲欧美日本精品| 日本久久久精品中文字幕|