Skip to content

Commit

Permalink
add 1192 (go TLE //todo: fix it)
Browse files Browse the repository at this point in the history
  • Loading branch information
luliyucoordinate committed Sep 19, 2019
1 parent 6799097 commit 842975f
Show file tree
Hide file tree
Showing 5 changed files with 121 additions and 1 deletion.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -495,4 +495,5 @@ LeetCode
|1176|[Diet Plan Performance](https://leetcode.com/problems/diet-plan-performance/) | c | [c++](./src/1176-Diet-Plan-Performance/1176.cpp) |[python](./src/1176-Diet-Plan-Performance/1176.py)|[go](./src/1176-Diet-Plan-Performance/1176.go)|[js](./src/1176-Diet-Plan-Performance/1176.js)|Easy|
|1189|[Maximum Number of Balloons](https://leetcode.com/problems/maximum-number-of-balloons/) | c | [c++](./src/1189-Maximum-Number-of-Balloons/1189.cpp) |[python](./src/1189-Maximum-Number-of-Balloons/1189.py)|[go](./src/1189-Maximum-Number-of-Balloons/1189.go)|[js](./src/1189-Maximum-Number-of-Balloons/1189.js)|Easy|
|1190|[Reverse Substrings Between Each Pair of Parentheses](https://leetcode.com/problems/reverse-substrings-between-each-pair-of-parentheses/) | c | [c++](./src/1190-Reverse-Substrings-Between-Each-Pair-of-Parentheses/1190.cpp) |[python](./src/1190-Reverse-Substrings-Between-Each-Pair-of-Parentheses/1190.py)|[go](./src/1190-Reverse-Substrings-Between-Each-Pair-of-Parentheses/1190.go)|[js](./src/1190-Reverse-Substrings-Between-Each-Pair-of-Parentheses/1190.js)|Medium|
|1191|[K-Concatenation Maximum Sum](https://leetcode.com/problems/k-concatenation-maximum-sum/) | c | [c++](./src/1191-K-Concatenation-Maximum-Sum/1191.cpp) |[python](./src/1191-K-Concatenation-Maximum-Sum/1191.py)|[go](./src/1191-K-Concatenation-Maximum-Sum/1191.go)|[js](./src/1191-K-Concatenation-Maximum-Sum/1191.js)|Medium|
|1191|[K-Concatenation Maximum Sum](https://leetcode.com/problems/k-concatenation-maximum-sum/) | c | [c++](./src/1191-K-Concatenation-Maximum-Sum/1191.cpp) |[python](./src/1191-K-Concatenation-Maximum-Sum/1191.py)|[go](./src/1191-K-Concatenation-Maximum-Sum/1191.go)|[js](./src/1191-K-Concatenation-Maximum-Sum/1191.js)|Medium|
|1192|[Critical Connections in a Network](https://leetcode.com/problems/critical-connections-in-a-network/) | c | [c++](./src/1192-Critical-Connections-in-a-Network/1192.cpp) |[python](./src/1192-Critical-Connections-in-a-Network/1192.py)|[go](./src/1192-Critical-Connections-in-a-Network/1192.go)|[js](./src/1192-Critical-Connections-in-a-Network/1192.js)|Hard|
33 changes: 33 additions & 0 deletions src/1192-Critical-Connections-in-a-Network/1192.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
class Solution
{
public:
vector<vector<int>> criticalConnections(int n, vector<vector<int>>& connections)
{
for (auto& it : connections) g[it[0]].emplace_back(it[1]), g[it[1]].emplace_back(it[0]);
low = vector<int>(n, 0);
dfs(1);
return res;
}

void dfs(int cur, int v=0, int p=-1)
{
int dfn = cur;
low[v] = cur;
for (auto i : g[v])
{
if (i != p)
{
if (low[i] == 0)
{
dfs(++cur, i, v);
if (low[i] > dfn) res.push_back({v, i});
}
low[v] = min(low[v], low[i]);
}
}
}
private:
vector<vector<int>> res;
vector<int> low;
unordered_map<int, vector<int>> g;
};
39 changes: 39 additions & 0 deletions src/1192-Critical-Connections-in-a-Network/1192.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
var g [][]int
var low []int
var res [][]int

func criticalConnections(n int, connections [][]int) [][]int {
g = make([][]int, n)
low = make([]int, n)
res = make([][]int, 0)
for _, e := range connections {
g[e[0]] = append(g[e[0]], e[1])
g[e[1]] = append(g[e[1]], e[0])
}
dfs(1, 0, -1)
return res
}

func dfs(cur, v, p int) {
dfn := cur
low[v] = cur
for _, i := range g[v] {
if i != p {
if low[i] == 0 {
cur++
dfs(cur, i, v)
if low[i] > dfn {
res = append(res, []int{i, v})
}
}
low[v] = min(low[v], low[i])
}
}
}

func min(x, y int) int {
if x < y {
return x
}
return y
}
29 changes: 29 additions & 0 deletions src/1192-Critical-Connections-in-a-Network/1192.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
var criticalConnections = function(n, connections) {
var g = [], low = Array(n), res = [];
low.fill(0);
for (let con of connections) {
g[con[0]] = g[con[0]] || [];
g[con[1]] = g[con[1]] || [];
g[con[0]].push(con[1]);
g[con[1]].push(con[0]);
}

var dfs=function(cur, v, p) {
var dfn = cur;
low[v] = cur;
for (let i of g[v]) {
if (i != p) {
if (low[i] == 0) {
cur++;
dfs(cur, i, v);
if (low[i] > dfn) {
res.push([i, v]);
}
}
low[v] = Math.min(low[v], low[i]);
}
}
}
dfs(1, 0, -1);
return res;
};
18 changes: 18 additions & 0 deletions src/1192-Critical-Connections-in-a-Network/1192.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
class Solution:
def criticalConnections(self, n, connections):
res, low, g = [], [None] * n, collections.defaultdict(list)
for i, j in connections:
g[i].append(j)
g[j].append(i)

def dfs(cur, v=0, p=None):
dfn = low[v] = cur
for i in g[v]:
if i != p:
if low[i] == None:
cur += 1
dfs(cur, i, v)
low[i] > dfn and res.append([v, i])
low[v] = min(low[v], low[i])
dfs(0)
return res

0 comments on commit 842975f

Please sign in to comment.