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

            統計

            • 隨筆 - 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 閱讀(397) 評論(0)  編輯 收藏 引用

            統計系統
            国产成人香蕉久久久久| 亚洲va久久久噜噜噜久久| 久久精品18| 国内精品久久久久影院老司| 亚洲人成伊人成综合网久久久| 久久99国产综合精品免费| 精品久久久久久无码人妻热| 漂亮人妻被中出中文字幕久久 | 蜜臀av性久久久久蜜臀aⅴ麻豆 | 人妻精品久久久久中文字幕| 久久久久久久久久久久久久| 大美女久久久久久j久久| 国产精品久久久久免费a∨| 久久精品一区二区三区不卡| 久久人人爽人人人人爽AV| 国产午夜精品久久久久九九电影| 亚洲乱码中文字幕久久孕妇黑人 | 日产精品99久久久久久| 国产AV影片久久久久久| 久久久久人妻精品一区二区三区 | 欧洲成人午夜精品无码区久久 | 久久妇女高潮几次MBA| 精品久久久久中文字幕一区| 久久精品国产精品亚洲毛片| 日批日出水久久亚洲精品tv| 久久夜色精品国产亚洲| 欧美大香线蕉线伊人久久| 77777亚洲午夜久久多喷| 久久影视国产亚洲| 久久久久国产精品麻豆AR影院| 精品熟女少妇a∨免费久久| 久久久久久久97| 久久午夜无码鲁丝片秋霞| 欧美成人免费观看久久| 色婷婷综合久久久久中文字幕| 国产午夜精品理论片久久| 国产激情久久久久影院小草| 亚洲精品国产成人99久久| 国产99久久九九精品无码| 久久国产精品一区二区| 久久综合中文字幕|