Zaha opened the scoring in the sixth minute, becoming the first player to reach 50 goals in the Premier League for Palace, before Aymeric Laporte was sent off for bringing him down and Conor Gallagher wrapped up the points late on.
The unexpected win at Etihad Stadium saw the Eagles end a run of four consecutive draws and rise to 13th in the table, and Zaha was quick to credit Frenchman Vieira for the team's positive form.
Vieira ended his playing career at City and then began his coaching career with the north-west club, taking charge of the reserve team before moving on to sister club New York City FC. He had a spell with Nice and joined Palace in July of this year after the retirement of Roy Hodgson.
"I feel like we have had a threat [before] but the difference now is that we keep the ball from the back and build and make our chances," Zaha said after the game. "We are exploiting our talent.
"[Vieira] knows what he is talking about and we have all seen him do it. It's surreal because he was an amazing player. Every player is buying into it and slowly the results will come."
The Ivory Coast forward was pleased with how Palace disrupted City and revealed delight at his growing connection with on-loan Chelsea midfielder Gallagher.
"It was about getting in their faces and not letting them play," Zaha said. "We know how good they are, we wanted to show them what we could do."
His goal was not a clean strike, as Zaha admitted.
"I scuffed it, but a goal is a goal," he said. "I was just buzzing to see it go in, so I was happy. Conor Gallagher brings a lot of energy and I needed people to link up with."
City defender Dias was downcast about the result and questioned whether Laporte's challenge on Zaha was worthy of a red card, with Leicester City's Jonny Evans shown only a yellow for a similar offence against Arsenal's Pierre-Emerick Aubameyang earlier in the day.
"The reaction is that we have a game in a short period of time and we are already thinking about it," Dias said. "Today we lost three very important points, but it is football. We are not happy but looking forward. Today we were not at our best, but even so the team fought and gave everything and it was not enough."
On the dismissal of Laporte, Dias said: "It was a little bit strange to see a red. I was walking back thinking it was a yellow. I never thought [the referee] would go for a red but we have to accept it."