Pagini recente » Sandbox (cutiuţa cu năsip) | Istoria paginii runda/temahashuri_9_17_10 | Istoria paginii runda/bun_simulareoji_2007_11-12 | Cod sursa (job #650231) | Cod sursa (job #1705217)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
class Graph {
private int numNodes;
public List<List<Integer>> edges;
int costuri[][];
public Graph(){
edges = new ArrayList<>();
}
public void insertNode(int node){
edges.add(new ArrayList<>());
}
public void insertEdge(int fromNode, int toNode){
edges.get(fromNode).add(toNode);
}
public int getNumNodes(){
return numNodes;
}
public int[][] getCosts(){
return costuri;
}
public void readData(BufferedReader f_in) throws IOException{
edges.add(new ArrayList<>());
String str;
String aux[];
str = f_in.readLine();
aux = str.split(" ");
numNodes = Integer.parseInt(aux[0]);
int numEdges = Integer.parseInt(aux[1]);
int i;
for(i = 0; i<=numNodes; i++){
insertNode(i);
}
int muchie;
for( muchie = 1; muchie<=numEdges; muchie++){
str = f_in.readLine();
aux = str.split(" ");
int Node1 = Integer.parseInt(aux[0]);
int Node2 = Integer.parseInt(aux[1]);
insertEdge(Node1,Node2);
insertEdge(Node2,Node1);
}
}
}
class DFS{
int numNodes,i;
int visit[] = new int[100010];
Graph g;
DFS(int numNodes, Graph g,int v[]){
this.numNodes = numNodes;
this.g = g;
this.visit = v;
}
public void dfs(int sursa,int visit[]) throws IOException{
visit[sursa] = 1;
int nr_noduri = g.edges.get(sursa).size();
for(i = 0; i<nr_noduri; i++){
if(visit[g.edges.get(sursa).get(i)] == 0){
dfs(g.edges.get(sursa).get(i),visit);
}
}
}
}
public class Main {
final static String PATH = "dfs.in";
final static String PATH2 = "dfs.out";
public static void main(String args[]) throws IOException{
BufferedReader f_in = new BufferedReader(new FileReader(PATH));
BufferedWriter f_out = new BufferedWriter(new FileWriter(PATH2));
int comp_conexe = 0;
int i;
int vizitare[] = new int[100010];
Graph g = new Graph();
g.readData(f_in);
DFS arbore = new DFS(g.getNumNodes(),g,vizitare);
for(i = 1; i <=g.getNumNodes(); i++){
if(vizitare[i] == 0){
comp_conexe++;
arbore.dfs(i,vizitare);
}
}
comp_conexe--;
f_out.write(String.valueOf(comp_conexe));
f_in.close();
f_out.close();
}
}