bạn nào làm bài này rùi giúp mình với.
acm.timus.ru/problem.aspx?space=1&num=1272
cứ báo lổi Wrong answer.
acm.timus.ru/problem.aspx?space=1&num=1272
cứ báo lổi Wrong answer.
#include <stdio.h> #include <string.h> #include <math.h> #include <float.h> #include <iostream> #include <conio.h> #define MAX 100 int SoCanh=0; bool V[MAX]; struct GRAPH { int n;//chi so thanh pho int k;//so duong ham int m;//so cau int a[MAX][MAX]; }; typedef struct { int v1; int v2; int w; }EDGE; EDGE T[MAX]; void NhapMaTran(GRAPH &g) { //printf("Nhap vao so thanh pho:\t"); scanf("%d",&g.n); //printf("So duong ham :"); scanf("%d",&g.k); //printf("So duong cau :"); scanf("%d",&g.m); // khoi tao ma tran vuong nxn voi cac gia tri la 0. for(int i = 0; i<g.n; i++) { for(int j = 0; j<g.n; j++) { g.a[i][j] = 0; } } int canh; // cap nhat lai gia tri tuong ung cho duong ham for (int i=0;i<g.k;i++) { scanf("%d",&canh); int x = (canh % 10); int y = int(canh/10); g.a[x-1][y-1]=g.a[y-1][x-1]=1; } // cap nhat lai gia tri tuong ung cho duong ham for (int i=0;i<g.m;i++) { scanf("%d",&canh); int x = (canh % 10); int y = int(canh/10); g.a[x-1][y-1]=g.a[y-1][x-1]=2; } } void XuatMaTran(GRAPH &g) { printf("%d\n", g.n); int i, j; for (i=0; i<g.n; i++) { for (j=0; j<g.n; j++) { printf( "%d\t", g.a[i][j]); } printf("\n"); } } void PrimAlg(GRAPH g) { int nT = 0; //Gán tất cả các đỉnh là chưa xét for( int i = 0 ; i < g.n; i++) { V[i] = false; } //Gán đã xét cho đỉnh 0 V[0] = true; //Bắt đầu vòng lặp while(nT < g.n - 1) { EDGE eMin; int iMinWeight = -1.0; // -1 nghĩa là chưa có cạnh min //duyệt tất cả các đỉnh i chưa được xét for(int i = 0 ; i < g.n; i++) { if(V[i] == false) { //duyệt tat ca cac j canh da xet roi for(int j = 0 ; j < g.n; j++) { if(V[j] == true && g.a[i][j] != 0) { if(iMinWeight == -1.0 || iMinWeight > g.a[i][j]) //chọn cạnh (i;j) nếu có trọng số nhỏ hơn iMinWeight hiện tại { eMin.v1 = i; eMin.v2 = j; eMin.w = g.a[i][j]; iMinWeight = g.a[i][j]; } } } } } if(iMinWeight == -1.0) { printf("khong lien thong"); break; } else { //them canh eMin vao cay khung T[nT] = eMin; nT++; //cập nhật đỉnh đã xét cho đỉnh v1 V[eMin.v1] = true; } } SoCanh=nT; } void ShowBrigde(EDGE E[MAX], int nE) { int i_Cau=0; // khoi tai bien luu so cau it nhat for(int i = 0 ; i < nE; i++) { if(E[i].w==2) i_Cau++;// Neu canh co trong so la 2 tuc la canh do la cay cau } printf("%d",i_Cau); } void main() { GRAPH g; NhapMaTran(g); //printf("Ma tran ke\n"); //XuatMaTran(g); PrimAlg(g); ShowBrigde(T,SoCanh); }
#include <iostream> #include <vector> #include <cstdio> using namespace std; typedef vector<int> vi; typedef vector<vi> vii; int n,k,m; vii a; // luu do thi vi dfs_mark; // mang danh dau void nhapdothi() { int x,y; a.clear(); scanf("%d%d%d",&n,&k,&m); a = vii(n); dfs_mark.assign(n,-1); for(int i=0; i<k; i++) { scanf("%d%d",&x,&y); a[x-1].push_back(y-1); a[y-1].push_back(x-1); } } // duyet do thi theo chieu sau void dfs(int u) { dfs_mark[u]=0; for(unsigned int j=0; j<a[u].size(); j++) { int v= a[u][j]; if(dfs_mark[v]==-1) dfs(v); } } int main() { nhapdothi(); int count=0; for(int i=0; i<n; i++) { if(dfs_mark[i]==-1) { dfs(i); count++; } } printf("%d",count-1); return 0; }
#include <iostream> #include <vector> #include <cstdio> using namespace std; typedef vector<int> vi; typedef vector<vi> vii; int n,k,m; vii a; // luu do thi vi dfs_mark; // mang danh dau void nhapdothi() { int x,y; a.clear(); scanf("%d%d%d",&n,&k,&m); a = vii(n); dfs_mark.assign(n,-1); for(int i=0; i<k; i++) { scanf("%d%d",&x,&y); a[x-1].push_back(y-1); a[y-1].push_back(x-1); } } // duyet do thi theo chieu sau void dfs(int u) { dfs_mark[u]=0; for(unsigned int j=0; j<a[u].size(); j++) { int v= a[u][j]; if(dfs_mark[v]==-1) dfs(v); } } int main() { nhapdothi(); int count=0; for(int i=0; i<n; i++) { if(dfs_mark[i]==-1) { dfs(i); count++; } } printf("%d",count-1); return 0; }
Comment