Untitled
unknown
plain_text
a year ago
6.7 kB
9
Indexable
ThanhTri, Frog, Farm, wellprj
//TanCongThanhTri
#include<iostream>
using namespace std;
#define SIZE 100
int N, answer, root;
int lienket[100][100] = {0};
int trongluong[100] = {0};
int visited[100] = {0};
int parent[100] = {0};
void clear_visit() {
for(int i = 0; i < N; i++) {
visited[i] = 0;
}
}
int DFS(int k, int cha) {
visited[k] = 1;
parent[k] = cha;
for(int i = 0; i < N; i++) {
if(lienket[k][i]) { //ton tai khoang k->i
if(!visited[i]) {
if(DFS(i, k)) {
return 1;
}
} else { //neu vi tri da visited va ko phai cha cua dinh hien tai. khi do se co 1 chu trinh
if(i != cha && cha != -1 && i == root) {
int sum = trongluong[k] + trongluong[i];
int minValue = sum;
int vStart = k;
int vEnd = i;
//tim canh be nhat trong chu trinh
int x = k;
while(parent[x] != -1) {
sum = trongluong[x] + trongluong[parent[x]];
if(sum < minValue) {
minValue = sum;
vStart = parent[x];
vEnd = x;
}
x = parent[x];
}
lienket[vStart][vEnd] = lienket[vEnd][vStart] = 0; //bo canh nho nhat trong chu trinh
answer += minValue;
return 1;
}
}
}
}
return 0;
}
int TC;
int main() {
//freopen("Text.txt","r", stdin);
int TC, idx, tmp, C;
cin >> TC;
for(int tc = 1; tc <= TC; tc++) {
answer = 0;
cin >> N;
//reset
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) {
lienket[i][j] = 0;
}
}
//input data
for(int i = 0; i < N; i++) {
cin >> idx;
cin >> trongluong[idx] >> C;
for(int j = 0; j < C; j++) {
cin >> tmp;
lienket[idx][tmp] = 1;
lienket[tmp][idx] = 1;
}
}
answer = 0;
for(int i = 0; i < N; i++) {
clear_visit();
root = i;
if(DFS(i, -1)) i--;
}
cout << answer << endl;
}
return 0;
}
//TheFrog
#include<iostream>
using namespace std;
int tc, n, inf = 1000000000, lowE = 1, highE = 200;
int r[3][201], a[201][201];
int sqrtt(int x) {
int i = 0;
while(i * i < x) {
i++;
}
return i;
}
int energyJump(int x1, int y1, int r1, int x2, int y2, int r2) {
int e = sqrtt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)) - r1 - r2;
if(e <= 40) return lowE;
else if(e <= 90) return highE;
else return inf;
}
int findMinE() {
bool selected[201] = {
0
};
int selectedCnt = 0;
int minEn[201];
minEn[0] = 0;
for(int i = 1; i < n; i++) {
minEn[i] = inf;
}
int nearestLeaf = 0, nearestDist; //id và kho?ng cách c?a chi?c lá g?n nh?t
while(selectedCnt < n) { //l?p cho đ?n khi t?t c? lá đ? đư?c ch?n
//trong s? lá chưa ch?n, t?m cái có kho?ng cách g?n nh?t (tham lam)
nearestDist = inf;
for(int i = 0; i < n; i++) {
if(!selected[i] && minEn[i] < nearestDist) {
nearestDist = minEn[i];
nearestLeaf = i;
}
}
//Đi?u ki?n d?ng: lá đang thăm có kho?ng cách là INF, ho?c đ? g?p đư?c lá th? N - 1 (đích)
if(nearestDist == inf || nearestLeaf == n - 1) break;
//Đánh d?u thăm
selectedCnt++;
selected[nearestLeaf] = true;
//C?p nh?t kho?ng cách c?a các lá có th? nh?y t?i t? lá đang thăm
for(int i = 0; i < n; i++)
if(!selected[i] && minEn[nearestLeaf] + a[nearestLeaf][i] < minEn[i]) minEn[i] = minEn[nearestLeaf] + a[nearestLeaf][i];
}
return minEn[n - 1];
}
int main() {
freopen("input.txt", "r", stdin);
cin >> tc;
for(int t = 1; t <= tc; t++) {
cin >> n;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(j == i) a[i][j] = 0;
else a[i][j] = inf;
}
}
for(int i = 0; i < n; i++) {
cin >> r[0][i] >> r[1][i] >> r[2][i];
for(int j = 0; j < i; j++) {
a[i][j] = a[j][i] = energyJump(r[0][i], r[1][i], r[2][i], r[0][j], r[1][j], r[2][j]);
}
}
int minE = findMinE();
if(minE == inf) cout << -1 << endl;
else cout << minE / highE << " " << minE % highE << endl;
}
return 0;
}
//BaoVeNongTrang
#include<iostream>
using namespace std;
const int MAX = 705;
int N,M; // L?n lư?t là s? lư?ng hàng, c?t c?a ma tr?n
int Answer; // K?t qu? là s? lư?ng đ?nh đ?i
int Map[MAX][MAX]; // B?n đ? c?a nông trang
bool Visit[MAX][MAX]; // Đánh d?u đ? ki?m tra đ? duy?t hay chưa
bool IsHill; // Đánh d?u xem có ph?i là đ?nh đ?i hay không
int drow[8] = {-1,-1,-1, 0,0, 1,1,1};
int dcol[8] = {-1, 0, 1,-1,1,-1,0,1};
void DFS(int row, int col)
{
// T?i m?i đi?m ta s? đánh d?u đi?m đó đ? đư?c duy?t
Visit[row][col] = true;
for(int i = 0; i < 8; i++)
{
int r = row + drow[i];
int c = col + dcol[i];
if(r >= 0 && r < N && c >= 0 && c < M)
{
// T?i m?t đi?m mà t?n t?i 1 đi?m k? có giá tr? l?n hơn
// th? đi?m đó không ph?i đ?nh đ?i
if(IsHill && Map[r][c] > Map[row][col]) IsHill = false;
// Duy?t t?i các đi?m có cùng đ? cao mà chưa đư?c duy?t
// v? các đi?m đó s? thu?c cùng 1 đ?nh đ?i.
if(Map[r][c] == Map[row][col] && !Visit[r][c]) DFS(r, c);
}
}
}
int main()
{
//freopen("input.txt","r",stdin);
ios::sync_with_stdio(false);
// Nh?p đ?u vào
cin >> N >> M;
for(int i = 0; i < N; i++)
for(int j = 0; j < M; j++)
{
cin >> Map[i][j];
Visit[i][j] = false;
}
// Duy?t t?ng ph?n t? trong ma tr?n
// và ki?m tra t?i ph?n t? chưa đư?c xét
for(int i = 0; i < N; i++)
for(int j = 0; j < M; j++)
if(!Visit[i][j])
{
// Kh?i t?o IsHill = true, sau đó s? d?ng thu?t toán DFS
// đ? duy?t ma tr?n. Sau quá tr?nh duy?t, n?u như IsHill v?n có
// giá tr? true th? ch?ng t? đi?m v?a xét là đ?nh đ?i.
IsHill = true;
DFS(i, j);
if(IsHill) Answer++;
}
// In k?t qu? s? đ?nh đ?i
cout << Answer << endl;
return 0;
}
//welProject
#define _CRT_SECURE_NO_WARNINGS
#define SIZE 109#include<iostream>
using namespace std;
int visit[SIZE];
int A[SIZE][SIZE];
int countdown;
int Answer;
int i, j;
int mini;
int jmini;
int main(int argc, char ** argv) {
int test_case;
int T, N;
ios::sync_with_stdio(false);
//freopen("Well Project.txt", "r", stdin);
cin >> T;
for(test_case = 1; test_case <= T; ++test_case) {
Answer = 0;
cin >> N;
for(i = 1; i <= N; i++) {
for(j = 1; j <= N; j++) {
cin >> A[i][j];
}
visit[i] = 0;
}
// PRIM
// Add 1st vertex to MST
visit[1] = 1;
countdown = 1;
//Add one by one vertex to MST
while(countdown < N) {
//Find the minimum weight vertex
mini = 1000000;
for(i = 1; i <= N; i++) {
if(visit[i] == 1) {
for(j = 1; j <= N; j++) {
if(j != i && visit[j] == 0) {
if(A[i][j] < mini) {
mini = A[i][j];
jmini = j;
}
}
}
}
}
visit[jmini] = 1;
Answer += mini;
countdown++;
}
cout << "Case #" << test_case << endl << Answer << endl;
}
return 0;
}
Editor is loading...
Leave a Comment