Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

266ms,有没有别的做法?

Posted by KatrineYang at 2016-12-02 14:28:22 on Problem 1388
#include <iostream>
#include <cstring>
#include <stdio.h>
#include <queue>
using namespace std;

int INFTY = 2147483647/2;

int main() {
	int n;
	while(1){
		scanf("%d",&n);
		if(!n) break;
		int adjNum[233] = {0};
		int adj[233][233] = {0};
		for(int i = 0; i < n; i++){
			char tmp[233];
			scanf("%s", tmp);
			for(int j = i+1; j < n; j++){
				if(tmp[j] == '1'){
					adj[i][adjNum[i]] = j;
					adjNum[i]++;
					adj[j][adjNum[j]] = i;
					adjNum[j]++;
				}
			}
		}
		int dist[233][233];
		int kd[233] = {0};
		for(int i = 0; i < n; i++){
			for(int j = 0; j < n; j++){
				dist[i][j] = INFTY;
			}
		}
		for(int i = 0; i < n; i++){
			queue<int> bfs;
			bool used[233] = {0};
			used[i] = 1;
			dist[i][i] = 0;
			bfs.push(i);
			while(!bfs.empty()){
				int t = bfs.front();
				bfs.pop();
				for(int j = 0; j < adjNum[t]; j++){
					if(!used[adj[t][j]]){
						dist[i][adj[t][j]] = dist[i][t]+1;
						used[adj[t][j]] = 1;
						bfs.push(adj[t][j]);
						kd[i]++;
					}
				}
			}
		}

		int cnt = 0;
		for(int k = 0; k < n; k++){
			//printf("qudiao %d:\n", k);
			bool isH = 0;
			for(int i = 0; i < n; i++){
				if(i==k)continue;
				int kdie = 0;
				queue<int> bfs;
				bool used[233] = {0};
				used[i] = 1;
				int dists[233] = {0};
				for(int j = 0; j < n; j++) dists[j] = INFTY;
				dists[i] = 0;
				bfs.push(i);
				while(!bfs.empty()){
					int t = bfs.front();
					bfs.pop();
					for(int j = 0; j < adjNum[t]; j++){
						if(adj[t][j] != k && !used[adj[t][j]]){
							dists[adj[t][j]] = dists[t]+1;
							if(dists[adj[t][j]] > dist[i][adj[t][j]]){
								isH = 1;
								goto done;
							}
							used[adj[t][j]] = 1;
							bfs.push(adj[t][j]);
							kdie++;
						}
					}
				}
				//printf("%d %d\n", i, kdie);
				if(kdie < kd[i]-1){
					isH = 1;
					break;
				}
			}
			done:
			if(isH) cnt++;
		}
		printf("%d\n", cnt);
	}

	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator