一、题目
二、代码
class Solution
{
int n = 1001;
int[] father = new int[n];
public void init()
{
int i;
for(i=0;i<n;i++)
{
father[i] = i;
}
}
public int find(int u)
{
if(u==father[u]) return u;
father[u] = find(father[u]);
return father[u];
}
public boolean same(int u,int v)
{
u = find(u);
v = find(v);
return u==v;
}
public void join(int u, int v)
{
u = find(u);
v = find(v);
if(u==v) return ;
father[u] = v;
}
public int[] getRemoveEdge(int[][] edges)
{
int i;
init();
for(i=0;i<edges.length;i++)
{
if(same(edges[i][0],edges[i][1]))
{
return edges[i];
}
join(edges[i][0],edges[i][1]);
}
return null;
}
public boolean isTreeAfterRemoveEdge(int[][] edges , int deleteEdge)
{
int i;
init();
for(i=0 ; i<edges.length;i++)
{
if(i == deleteEdge) continue;
if(same(edges[i][0],edges[i][1]))
{
return false;
}
join(edges[i][0],edges[i][1]);
}
return true;
}
public int[] findRedundantDirectedConnection(int[][] edges)
{
int i,j;
int[] inDegree = new int[n];
for(i=0;i<edges.length;i++)
{
inDegree[edges[i][1]] = inDegree[edges[i][1]] + 1 ;
}
LinkedList<Integer> twoDegree = new LinkedList<Integer>();
for(i = edges.length - 1 ; i>=0 ;i--)
{
if(inDegree[edges[i][1]] == 2)
{
twoDegree.add(i);
}
}
if(!twoDegree.isEmpty())
{
if(isTreeAfterRemoveEdge(edges , twoDegree.get(0)))
{
return edges[twoDegree.get(0)];
}
return edges[twoDegree.get(1)];
}
return getRemoveEdge(edges);
}
}
三、运行结果