First of all you "add" to your elements an index indicating which list they are a part of, they merge all of them, and lastly you use something similar to your code.
var query = arr.Select((x,i) => x.Select(y=>new{Elem = y, Index = i}))
.SelectMany(x=>x)
.GroupBy(x => x.Elem)
.Where(x => x.Count() > 1)
.ToDictionary(x => x.First().Elem, y => y.Select(z => z.Index).ToList());
The main difference is how you create the dictionary, since you have to build the list of indices where your duplicates are found.
As an example, on this input:
List<int>[] arr = new List<int>[3];
arr[0] = new List<int>() { 1, 2, 3 };
arr[1] = new List<int>() { 1 };
arr[2] = new List<int>() { 1, 3 };
you get :
[1, {0,1,2}]
[3, {0,2}]