Untitled
unknown
plain_text
2 years ago
5.6 kB
5
Indexable
#include<iostream> using namespace std; #define INF 1000000 int N; bool Visited[100]; int key[100]; int adj[105][105]; int parent[100]; int findMin() { int ret = 0; int min = INF; for(int v =0; v < N; v++) { if(!Visited[v] && key[v] < min) { min = key[v]; ret = v; } } return ret; } int sum_arr(int a[], int n) { int sum = 0; for(int i =0; i< n; i++) { sum+= a[i]; } return sum; } int main() { int T; int res; // freopen("Text.txt","r",stdin); cin>>T; for(int tc =1; tc <= T; tc++) { cin>>N; for(int i = 0; i< N; i++) { for(int j = 0; j< N; j++) { cin>>adj[i][j]; } } for(int i =0; i< N; i++) { Visited[i] = false; key[i] = INF; parent[i] = -1; } key[0] = 0; for(int i =0; i < N - 1; i++) { int u = findMin(); Visited[u] = true; for(int v = 0; v < N; v++) { if(!Visited[v] && adj[u][v] < key[v]) { key[v] = adj[u][v]; parent[v] = u; } } } int sum = sum_arr(key, N); cout<<"Case #"<<tc<<endl; cout<<sum<<endl; } return 0; } ///////////////////////////////////////////////////////////////////////////////////////////////////// #include<iostream> using namespace std; int m,n,lev,ans; int dem_nuoc, dem_dat; int M[105][105]; int visit[105][105]; int f=-1, r=-1; int Qx[100000] ; int Qy[100000]; void push(int x, int y) { f++; Qx[f] = x; Qy[f] =y; } void pop(int &x,int &y) { r++; x= Qx[r]; y= Qy[r]; } void bfs_nuoc(int x,int y,int k) { f=r=-1; push(x,y); dem_nuoc++; visit[x][y] =1; while(f != r) { pop(x,y); int dx[4]={1,-1,0,0}; int dy[4]= {0,0,1,-1}; for(int i=0; i<4; i++) { int xx= x +dx[i]; int yy= y +dy[i]; if(xx >=1 && xx <=m && yy >=1 && yy <=n && visit[xx][yy] == 0 && M[xx][yy] <=k) { push(xx,yy); visit[xx][yy] =1; dem_nuoc++; } } } } void bfs_dat(int x,int y) { f=r=-1; push(x,y); dem_dat ++; visit[x][y] =1; while(f != r) { pop(x,y); int dx[4]={1,-1,0,0}; int dy[4]= {0,0,1,-1}; for(int i=0; i<4; i++) { int xx= x +dx[i]; int yy= y +dy[i]; if(xx >=1 && xx <=m && yy >=1 && yy <=n && visit[xx][yy] == 0 ) { push(xx,yy); visit[xx][yy] =1; dem_dat++; } } } } void reset() { for(int i=1; i<=m; i++) { for(int j=1; j<=n; j++) visit[i][j]=0; } } int main() { freopen("Text.txt","r",stdin); int stt=1; while(1) { cin >> m >> n; if(m== 0 && n== 0) {break;} else { int minn=1000, maxx=0; for(int i=1; i<=m; i++) { for(int j=1; j<=n; j++) { cin >> M[i][j]; visit[i][j] =0; if((i == 1 || i== m || j==1 || j==n) && M[i][j] < minn) { minn = M[i][j]; } if(M[i][j] > maxx) { maxx = M[i][j];} } } //////////////// ans =0; for(lev =minn; lev <= maxx; lev++) { dem_dat=0 ; dem_nuoc=0; reset(); for(int i=1; i<=m; i++) { for(int j=1; j<=n; j++) { if((i == 1 || i== m || j==1 || j==n ) && M[i][j] <= lev && visit[i][j] ==0) { bfs_nuoc(i,j,lev); } } } for(int i=1; i<=m; i++) { for(int j=1; j<=n; j++) { if(visit[i][j] ==0 && M[i][j] > lev) { bfs_dat(i,j); i=200 ; j=200; } } } if(dem_nuoc+ dem_dat < m*n) {ans = lev; break;} } } if(ans ==0 ) cout << "Case " << stt << ": Island never splits." << endl; else cout << "Case " << stt << ": Island splits when ocean rises "<< ans << " feet." << endl; stt++; } return 0; } /////////////////////////////////////////////////////////////////////////////////////// #include<iostream> using namespace std; int M[25][25]; int visit[25][25]; int G[5][2]; int N,MV; int f=-1,r=-1; int Qx[10000]; int Qy[10000]; void push(int x,int y) { f++; Qx[f] =x; Qy[f] =y; } void pop(int &x, int &y) { r++; x= Qx[r]; y= Qy[r]; } int bfs(int x, int y) { f=r=-1; push(x,y); visit[x][y] =1; while(f != r) { pop(x,y); int dx[4]= { 1,-1 ,0,0}; int dy[4]= {0,0,-1,1}; for(int i=0; i<4; i++) { int xx= x+ dx[i]; int yy = y+dy[i]; if(xx >=1 && xx <= N && yy >=1 && yy <= N) { if(M[xx][yy] != 0 && visit[xx][yy] == 0) { push(xx,yy); visit[xx][yy] = visit[x][y] +1; } } } } int maxx=0; for(int i=1; i<= MV; i++) { if(visit[G[i][0]][G[i][1]] > maxx) {maxx= visit[G[i][0]][G[i][1]];} if(visit[G[i][0]][G[i][1]] == 0) return 25; } return maxx; } int main() { freopen("Text.txt","r",stdin); int t; cin >> t; for(int stt =1; stt <=t; stt ++) { cin >> N >> MV; for(int i=1; i <= MV; i++) { cin >> G[i][0] >> G[i][1]; } for(int i=1; i<=N; i++) { for(int j=1; j<= N; j++) { cin >> M[i][j]; visit[i][j] =0; } } for(int i=1; i <= MV; i++) { M[G[i][0]][G[i][1]] =2; } ////////////////////////////////// int minn= 25; for(int i=1; i<=N; i++) { for(int j=1; j<= N; j++) { if(M[i][j] == 1) { if(bfs(i,j) -1 < minn) {minn= bfs(i,j) -1 ;} for(int q=1; q<= N; q++) { for(int k=1; k<=N; k++) visit[q][k] =0; } } } } ///////////////////////////// if(minn != 24) { cout << "Case #" << stt << endl << minn << endl;} else { cout << "Case #" << stt << endl << "-1" << endl;} } return 0; }
Editor is loading...