日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

week7 TT的魔猫

發布時間:2023/12/16 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 week7 TT的魔猫 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TItle

Input

Output

樣例
Input
3
3 3
1 2
1 3
2 3
3 2
1 2
2 3
4 2
1 2
3 4
Output
0
0
4

分析

  • 勝負關系具有傳遞性,可以理解為圖上的傳遞閉包。使用Floyed算法。
  • 使用二維數組記錄勝負關系dis[a][b]==0代表a和b之間關系不明,dis[a][b]==1代表a比b強。
  • 對于傳遞勝負關系的中間點k,如果a比k強,且k比b強,則a比b強,即dis[a][k]且dis[k][b]都等于1,那么dis[a][b]=1
  • 對于任意兩點,它們要么直接有勝負關系,要么通過中間點傳遞勝負關系,二者只要有一種情況滿足有勝負關系即可。故當dis[a][b]==1(直接)或dis[a][k]==dis[k][b]==1(間接),a勝過b。轉換為式子dis[a][b]=max(dis[a][b],dis[a][k]&dis[k][b])。
  • 比賽總數-可預知比賽數=不可預知比賽數。
    遍歷二維數組,記錄1的個數即為可預知比賽數。
    總結
    在本種解答方式中,遍歷二維數組記錄0的個數為不可預知比賽數是不可取的,因為只有當dis[a][b]==0且dis[b][a]==0,才代表a和b之間的關系無法預知。
    因為判斷式子為dis[a][b]=max(dis[a][b],dis[a][k]&dis[k][b]),故只要dis[a][k]==0,不管dis[k][b]是1或是0,dis[a][b]都不會被該邊。對dis[a][k]省去遍歷dis[k][b]。
#include<stdio.h> #include<algorithm> #include<string.h> #define range 500+10 using namespace std; int dis[range][range]; int N=0,M=0,ans=0; void Floyed(int n) {for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){if(dis[i][k]==0)continue; for(int j=1;j<=n;j++){dis[i][j]=max(dis[i][j],dis[i][k]&dis[k][j]);//從0到1// printf("i%d j%d %d\n",i,j,dis[i][j]);}}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(dis[i][j]==1)ans++;}} } int main() {int op=0;scanf("%d",&op);while(op--){for(int i=1;i<=N;i++) for(int j=1;j<=N;j++)dis[i][j]=0; ans=0; scanf("%d %d",&N,&M);int tempa=0,tempb=0;while(M--){scanf("%d %d",&tempa,&tempb);dis[tempa][tempb]=1;}Floyed(N);printf("%d\n",N*(N-1)/2-ans);}return 0; }

總結

以上是生活随笔為你收集整理的week7 TT的魔猫的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。