這題我學習了map的用法以及string 的快速輸入與輸出,這題格式要求 嚴格輸出要有逗號加乙個空格,還有就是每次都要換行什麼煩死啦!!!!(反正仔細看輸出格式)
其他都很水。。。。。
帶並查集的10ms做法:
#include#include#include#include#include#includeusing namespace std;
string name[60];
queueshow[60];
mapfindd;
void get(string &a)
k++; }}
void out(string a)
int amount;
int floyd[60][60];
int ufa[60];
void init(int n)
int find(int num)
void unionn(int a, int b)
int main()
if (findd[b] == 0)
floyd[findd[a]][findd[b]] = 1;
} for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
for (int k = 1; k <= n; k++)
floyd[j][k] = floyd[j][k] || (floyd[j][i] && floyd[i][k]);
for (int i = 1; i <= n; i++)
for (int j = i + 1; j <= n; j++)
if (floyd[i][j] == 1 && floyd[j][i] == 1)
unionn(i, j);
for (int i = 1; i <= n; i++)
if (times>1)
printf("\n");
printf("calling circles for data set %d:\n", times);
times++;
for (int i = 1; i <= n; i++)
}findd.clear(); }
}
簡單的0ms做法
#include#include#include#include#include#includeusing namespace std;
string name[60];
mapfindd;
int visit[60];
void get(string &a)
k++; }}
void out(string a)
int amount;
int floyd[60][60];
int ufa[60];
int main()
getchar();
for (int i = 0; i < m; i++)
if (findd[b] == 0)
floyd[findd[a]][findd[b]] = 1;
} for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
for (int k = 1; k <= n; k++)
floyd[j][k] = floyd[j][k] || (floyd[j][i] && floyd[i][k]);
//if (times>1)
//printf("\n");
printf("calling circles for data set %d:\n", times);
times++;
for (int i = 1; i <= n; i++)
}printf("\n");
} findd.clear(); }
}
並查集 一點小的感悟
最近在做acm題,遇到了乙個叫做並查集的東西,於是從網上找了一些資料,順便自己總結了一些,希望對大家和自己都有用 一 什麼叫做並查集 英文 disjoint set,即 不相交集合 將編號分別為1 n的n個物件劃分為不相交集合,在每個集合中,選擇其中某個元素代表所在集合。常見兩種操作 1 n合併兩個...
電影節 並查集 一點點思考
某屆電影節評選電影,共有兩部電影進入最後評選環節,有n名觀眾,每個人有一次投票的機會,每個人都按照規則投給其中一部電影。為了了解情況,記者隨機詢問了一些人,一共詢問了m次,特別神奇的是,記者每次都詢問兩個人,而且這兩個人都把票投給了同一部電影,觀眾編號為1 n。input 多組輸入,每組第一行是兩個...
每天學一點Swift 閉包 三
八 捕獲上下文中的變數和常量 1.閉包可以用訪問或修改閉包所在上下文中的變數或常量 對於常量只是訪問 這個過程被稱為捕獲。2.即使定義這些變數或常量的作用域已經不存在了,閉包也依然可以訪問或修改他們。3.swift 中最簡單的閉包形式就是巢狀函式 巢狀函式可以捕獲它所在的封閉韓式的變數 常量或引數。...