2#include3#include4#include5#include6#include78#defin" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

BZOJ 2597 [Wc2007]剪刀石頭布

系統 2093 0

題解:

http://wenku.baidu.com/view/0ad00abec77da26925c5b01c.html

?

吐槽這題數據,本地測全wa,就一直對拍,最后毛了,交了一發,ac了。。。

難道這個題是spj?

?

View Code
        
            1
        
         #include <iostream>


        
            2
        
         #include <cstring>


        
            3
        
         #include <cstdio>


        
            4
        
         #include <cstdlib>


        
            5
        
         #include <algorithm>


        
            6
        
         #include <ctime>


        
            7
        
        
            8
        
        
          #define
        
         N 20000


        
            9
        
        
          #define
        
         M 2001000


        
           10
        
        
           11
        
        
          using
        
        
          namespace
        
        
           std;


        
        
           12
        
        
           13
        
        
          int
        
        
           head[N],to[M],next[M],len[M],pr[M];


        
        
           14
        
        
          int
        
         pre[N],n,m,p,S,T,dis[N],q[M<<
        
          1
        
        
          ],cnt;


        
        
           15
        
        
          int
        
         kr[
        
          200
        
        ][
        
          200
        
        
          ],cha[N],fx[N],rd[N],num;


        
        
           16
        
        
          int
        
         ts[
        
          200
        
        ][
        
          200
        
        
          ];


        
        
           17
        
        
          bool
        
        
           vis[N];


        
        
           18
        
        
          double
        
        
           ttt;


        
        
           19
        
        
           20
        
         inline 
        
          void
        
         add(
        
          int
        
         u,
        
          int
        
         v,
        
          int
        
         r,
        
          int
        
        
           w)


        
        
           21
        
        
          {


        
        
           22
        
             to[cnt]=v; len[cnt]=r; pr[cnt]=w; next[cnt]=head[u]; head[u]=cnt++
        
          ;


        
        
           23
        
             to[cnt]=u; len[cnt]=
        
          0
        
        ; pr[cnt]=-w; next[cnt]=head[v]; head[v]=cnt++
        
          ;


        
        
           24
        
        
          }


        
        
           25
        
        
           26
        
         inline 
        
          void
        
        
           read()


        
        
           27
        
        
          {


        
        
           28
        
             scanf(
        
          "
        
        
          %d
        
        
          "
        
        ,&
        
          n);


        
        
           29
        
             memset(rd,
        
          0
        
        ,
        
          sizeof
        
        
           rd);


        
        
           30
        
             memset(head,-
        
          1
        
        ,
        
          sizeof
        
         head); cnt=
        
          0
        
        
          ;


        
        
           31
        
             m=n*(n-
        
          1
        
        )/
        
          2
        
        
          ;


        
        
           32
        
             S=
        
          0
        
        ; T=m+n+
        
          1
        
        ; num=
        
          0
        
        
          ;


        
        
           33
        
        
          for
        
        (
        
          int
        
         i=
        
          1
        
        ;i<=n;i++
        
          )


        
        
           34
        
        
          for
        
        (
        
          int
        
         j=
        
          1
        
        ;j<=n;j++
        
          )


        
        
           35
        
        
                  {


        
        
           36
        
                     scanf(
        
          "
        
        
          %d
        
        
          "
        
        ,&
        
          kr[i][j]);


        
        
           37
        
        
          if
        
        (j<=i) 
        
          continue
        
        
          ;


        
        
           38
        
                     num++
        
          ;


        
        
           39
        
        
          if
        
        (kr[i][j]==
        
          2
        
        ) add(num,i+m,
        
          1
        
        ,
        
          0
        
        ),add(num,j+m,
        
          1
        
        ,
        
          0
        
        ),rd[i]++,rd[j]++
        
          ;


        
        
           40
        
        
          else
        
        
          if
        
        (kr[i][j]==
        
          1
        
        ) add(num,i+m,
        
          1
        
        ,
        
          0
        
        ),rd[i]++
        
          ;


        
        
           41
        
        
          else
        
         add(num,j+m,
        
          1
        
        ,
        
          0
        
        ),rd[j]++
        
          ;


        
        
           42
        
        
                  }


        
        
           43
        
        
          for
        
        (
        
          int
        
         i=
        
          1
        
        ;i<=m;i++) add(S,i,
        
          1
        
        ,
        
          0
        
        
          );


        
        
           44
        
        
          for
        
        (
        
          int
        
         i=
        
          1
        
        ;i<=n;i++
        
          )


        
        
           45
        
        
          for
        
        (
        
          int
        
         j=
        
          1
        
        ;j<=rd[i];j++
        
          )


        
        
           46
        
                     add(i+m,T,
        
          1
        
        
          ,cha[j]);


        
        
           47
        
        
          }


        
        
           48
        
        
           49
        
         inline 
        
          bool
        
        
           spfa()


        
        
           50
        
        
          {


        
        
           51
        
             memset(dis,
        
          0x3f
        
        ,
        
          sizeof
        
        
           dis);


        
        
           52
        
             memset(pre,-
        
          1
        
        ,
        
          sizeof
        
        
           pre);


        
        
           53
        
        
          int
        
         h=
        
          1
        
        ,t=
        
          2
        
        
          ,sta;


        
        
           54
        
             q[
        
          1
        
        ]=S; vis[S]=
        
          true
        
        ; dis[S]=
        
          0
        
        
          ;


        
        
           55
        
        
          while
        
        (h<
        
          t)


        
        
           56
        
        
              {


        
        
           57
        
                 sta=q[h++]; vis[sta]=
        
          false
        
        
          ;


        
        
           58
        
        
          for
        
        (
        
          int
        
         i=head[sta];~i;i=
        
          next[i])


        
        
           59
        
        
          if
        
        (len[i]&&dis[to[i]]>dis[sta]+
        
          pr[i])


        
        
           60
        
        
                      {


        
        
           61
        
                         dis[to[i]]=dis[sta]+
        
          pr[i];


        
        
           62
        
                         pre[to[i]]=
        
          i;


        
        
           63
        
        
          if
        
        (!vis[to[i]]) vis[to[i]]=
        
          true
        
        ,q[t++]=
        
          to[i];


        
        
           64
        
        
                      }


        
        
           65
        
        
              }


        
        
           66
        
        
          return
        
         pre[T]!=-
        
          1
        
        
          ;


        
        
           67
        
        
          }


        
        
           68
        
        
           69
        
         inline 
        
          void
        
        
           updata()


        
        
           70
        
        
          {


        
        
           71
        
        
          for
        
        (
        
          int
        
         i=pre[T];~i;i=pre[to[i^
        
          1
        
        
          ]])


        
        
           72
        
        
              {


        
        
           73
        
                 len[i]-=
        
          1
        
        ; len[i^
        
          1
        
        ]+=
        
          1
        
        
          ;


        
        
           74
        
        
              }


        
        
           75
        
        
          }


        
        
           76
        
        
           77
        
         inline 
        
          int
        
         findwho(
        
          int
        
        
           u)


        
        
           78
        
        
          {


        
        
           79
        
        
          for
        
        (
        
          int
        
         i=head[u];~i;i=
        
          next[i])


        
        
           80
        
        
          if
        
        (!len[i]) 
        
          return
        
        
           to[i];


        
        
           81
        
        
          }


        
        
           82
        
        
           83
        
         inline 
        
          void
        
        
           go()


        
        
           84
        
        
          {


        
        
           85
        
        
          int
        
         ans=
        
          0
        
        
          ;


        
        
           86
        
        
          while
        
        (spfa()) ans+=
        
          dis[T],updata();


        
        
           87
        
             printf(
        
          "
        
        
          %d\n
        
        
          "
        
        ,(n*(n-
        
          1
        
        )*(n-
        
          2
        
        )/
        
          3
        
        +m-ans)/
        
          2
        
        
          );


        
        
           88
        
        
           89
        
        
          int
        
         now=
        
          0
        
        
          ;


        
        
           90
        
        
          for
        
        (
        
          int
        
         i=
        
          1
        
        ,t;i<=n;i++
        
          )


        
        
           91
        
        
          for
        
        (
        
          int
        
         j=i+
        
          1
        
        ;j<=n;j++
        
          )


        
        
           92
        
        
                  {


        
        
           93
        
                     now++; t=
        
          findwho(now);


        
        
           94
        
                     ts[t-m][i+j-t+m]=
        
          1
        
        
          ;


        
        
           95
        
        
                  }


        
        
           96
        
        
           97
        
        
          for
        
        (
        
          int
        
         i=
        
          1
        
        ;i<=n;i++
        
          )


        
        
           98
        
        
              {


        
        
           99
        
        
          for
        
        (
        
          int
        
         j=
        
          1
        
        ;j<=n;j++
        
          )


        
        
          100
        
                     printf(
        
          "
        
        
          %d 
        
        
          "
        
        
          ,ts[i][j]);


        
        
          101
        
                 puts(
        
          ""
        
        
          );


        
        
          102
        
        
              }


        
        
          103
        
        
          } 


        
        
          104
        
        
          105
        
         inline 
        
          void
        
        
           prep()


        
        
          106
        
        
          {


        
        
          107
        
        
          for
        
        (
        
          int
        
         i=
        
          1
        
        ;i<=
        
          110
        
        ;i++) fx[i]=i*i,cha[i]=fx[i]-fx[i-
        
          1
        
        
          ];


        
        
          108
        
        
          }


        
        
          109
        
        
          110
        
        
          int
        
        
           main()


        
        
          111
        
        
          {


        
        
          112
        
        
              prep();


        
        
          113
        
        
              read();


        
        
          114
        
        
              go();


        
        
          115
        
        
          return
        
        
          0
        
        
          ;


        
        
          116
        
         } 
      

?

?

BZOJ 2597 [Wc2007]剪刀石頭布


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 伊人久久大杳蕉综合大象 | 亚洲欧美激情精品一区二区 | 久久riav| 天天插夜夜操 | 日日噜噜噜夜夜爽爽狠狠 | 久久成人精品 | 日本xoxo | 在线精品国产第一页 | 99热久久这里只精品国产 | 国产精品在线播放 | 成人欧美一级毛片免费观看 | 欧美超级碰碰 | 高清一级毛片免免费看 | 精品一成人岛国片在线观看 | 国产日韩欧美精品一区二区三区 | 亚洲国产精品婷婷久久久久 | 26uuu最新 | 亚洲不卡一区二区三区在线 | 国产一区二区三区成人久久片 | 五十路一区二区三区视频 | 欧日韩一区二区三区 | 欧美性视频一区二区三区 | 奇米麻豆 | 六月婷婷久香在线视频 | 香香影院在线观看 | 一级亚洲 | 欧美十区 | 国产高清国产专区国产精品 | 欧美日韩精品一区二区三区 | 男人天堂视频网 | 乱人伦99久久 | 亚洲黄色自拍 | 亚洲成人xxx | 精品无人区乱码一区二区三区手机 | 午夜欧美日韩 | 日本乱人伦片中文字幕三区 | 国产精品午夜高清在线观看 | 欧美成人四级hd版 | 免费看黄色的网站 | 欧美日韩一二三区免费视频观看 | 高清国产精品入口麻豆 |